Как передать половину параметров в requestUrl и другие в JSON-запрос в Android?

Я новичок в Android, я сделал действие в том, что я должен опубликовать некоторые параметры, чтобы сделать вызов API и получить ответ, я должен передать некоторые параметры, добавляя URL-адрес запроса и другие, как в формате Json, Пожалуйста, скажите мне, как я могу сделайте, мой образец URL-запроса, как показано ниже:

http://dev.abctest.com/api/v1/book?customer_firstname=jigar&customer_lastname=jims&customer_mobile=9033309333&customer_email=jigar@epagestore.com&source_country=India&number_of_travellers=15

и другие параметры в теле json, как показано ниже:

{

    "destinations": [
        {
            "city_id": 1,
            "start_date": "2014/08/28",
            "end_date": "2014/09/30"
        },
        {
            "city_id": 5,
            "start_date": "2014/08/10",
            "end_date": "2014/09/03"
        }
    ]
}

2 ответа

Решение

Сначала вам нужно добавить поля url к вашему базовому URL. Затем вы можете добавить дополнительные поля, если у вас есть. Затем ваши данные как сущность в HttpPost, где URL будет тот, который получен после обработки.

Попробуйте следующее:

  1. Родительский метод, который будет вызван.

    public void request(String baseUrl,List<NameValuePair> urlFields, List<NameValuePair> formData,List<NameValuePair> optionalData ){
    
    // Append params to the URL 
    if (urlFields != null)
        baseUrl = baseUrl + getUrlPathForGet(urlFields);
    
    // adds Optional fields to the Url
    if (optional != null)
        baseUrl = baseUrl + "?" + URLEncodedUtils.format(optionalData, "utf-8");
    
    postData(baseUrl,formData);
    
    }
    
  2. Это добавит параметры URL к базовому URL

    private String getUrlPathForGet(List<NameValuePair> urlFields) {
    
    String path = "";
    
    if (urlFields != null) {
    
        for (NameValuePair pair : urlFields) {
        path = path + "/" + pair.getValue();
        }
    }
    
    return path;
    }
    
  3. Добавьте данные формы как сущность в объект HttpPost с измененным URL-адресом.

    public void postData(String baseUrl,List<NameValuePair> formData) {
    
    // Create a new HttpClient and Post Header
    HttpClient httpclient = new DefaultHttpClient();
    // pass the url as parameter and create HttpPost object.
    HttpPost post = new HttpPost(baseUrl);
    
    // Add header information for your request - no need to create 
    // BasicNameValuePair() and Arraylist.
    post.setHeader("Authorization", "Bearer " + token);
    post.setHeader("Content-Type", "application/json");
    post.setHeader("Cache-Control", "no-cache");    
    
    try {       
    
    // pass the content as follows:
    post.setEntity(new UrlEncodedFormEntity(formData,
                        HTTP.UTF_8));
    
    // Execute HTTP Post Request
    HttpResponse response = httpclient.execute(post);
    
    // TODO: Process your response as you would like.
    
    } catch (IOException e) {
        // TODO Auto-generated catch block
    }
    }
    
  1. Используйте JsonParserHelper в качестве класса Utility. Каждый раз, когда вы нажмете URL.

a.) Возьмите класс и разделите ваши URL-адреса на этот класс. Пусть предположим, App_WebServiceUrls

public class App_WebServiceUrls {

public static String GetDetails ="http://dev.abctest.com/api/v1/book";

}

2. Теперь при звонке на веб-сервис /Web Api. Сделайте вызов API в отдельном thred или используйте Asynctasks Так, чтобы избежать NetworkOnMainThredException.

new Thread(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub

                // Add your data
            List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>();

                nameValuePair.add(new BasicNameValuePair(customer_firstname, "Deepak"));
                nameValuePair.add(new BasicNameValuePair(customer_lastname, "Panwar"));


JSONObject json = null;

        try {

            json = new JSONObject();

    json = JsonParserHelper.makeHttpRequest(
                    App_WebServiceUrls.CompanyDivisions, "GET", nameValuePair);

            Log.d("Division List Response:", "" + json);

            if (json != null) {
}else
{

    /**To print tost on ui thread**/
    runOnUiThread(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub

              /**Write Toast here**/

            }
        });

} catch (JSONException e) {
            e.printStackTrace();
        }


            }
        }).start();

/вспомогательный класс для звонков через webapi/

public class JsonParserHelper {

    static InputStream is = null;

    static JSONObject jObj = null;

    static JSONArray jArr = null;

    static String json = "";

    public static JSONObject makeHttpRequest(String url, String method,

    List<NameValuePair> params) {

        try {

            if (method == "POST") {

                DefaultHttpClient httpClient = new DefaultHttpClient();

                String paramString = URLEncodedUtils.format(params, "utf-8");
                url += "?" + paramString;

                Log.v("Urltocheck", "" + url);

                HttpPost httpPost = new HttpPost(url);
                httpPost.setEntity(new UrlEncodedFormEntity(params, "utf-8"));
                HttpResponse httpResponse = httpClient.execute(httpPost);
                HttpEntity httpEntity = httpResponse.getEntity();

                is = httpEntity.getContent();

            } else if (method == "GET") {
                // request method is GET
                DefaultHttpClient httpClient = new DefaultHttpClient();

                String paramString = URLEncodedUtils.format(params, "utf-8");
                url += "?" + paramString;

                Log.v("Urltocheck", "" + url);

                HttpGet httpGet = new HttpGet(url);
                HttpResponse httpResponse = httpClient.execute(httpGet);
                HttpEntity httpEntity = httpResponse.getEntity();
                is = httpEntity.getContent();
            }

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }

        // try parse the string to a JSON object
        try {
            // jArr = new JSONArray(json);

            jObj = new JSONObject(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }

        // return JSON String (Array)
        // return jArr;

        return jObj;

    }

}
Другие вопросы по тегам