2016-10-17 1 views
2

Как передать эти параметры в метод после использования залпа библиотеки .Увидь связи и экран короткий JSON STRUCTURE URL: - POST api.wego.com/flights/api/k/2/searches?api_key=12345 & ts_code = 123Как отправить запрос POST с помощью тела JSON с помощью Volley?

Параметры сообщения: - link: - http://support.wan.travel/hc/en-us/articles/200191669-Wego-Flights-API. Я устал от этого, но снова столкнулся с ошибкой.

  StringEntity params= new StringEntity ("{\"trip\":\"[\" 
     {\"departure_code\":\","+departure,"arrival_code  \":\"+"+arrival+","+"outbound_date\":\","+outbound,"inbound_date\":\","+inbound+"}\"]\"}"); 

     request.addHeader("content-type", "application/json"); 
     request.addHeader("Accept","application/json"); 
+0

быстрый совет: переключиться на Okhttp или модифицировать, залп медленнее и будет трудно с точки зрения новичка, в то время как okhttp будет проще для вас! – OBX

+0

Что вам нужно сделать, так это передать json в качестве тела в почтовом запросе, используя okhttp, сообщите мне, если это вам поможет: http://stackoverflow.com/questions/34179922/okhttp-post-body-as-json – OBX

+0

Если вы настаиваете на использовании самого волейбола, вы также можете задать этот вопрос: http://stackoverflow.com/questions/23220695/send-post-request-with-json-data-using-volley – OBX

ответ

12

Обычный способ заключается в использовании HashMap с парой ключ-значение в качестве параметров запроса с Volley

Похожие на примере ниже, вам необходимо настроить для своих конкретных требований.

Вариант 1:

final String URL = "URL"; 
// Post params to be sent to the server 
HashMap<String, String> params = new HashMap<String, String>(); 
params.put("token", "token_value"); 
params.put("login_id", "login_id_value"); 
params.put("UN", "username"); 
params.put("PW", "password"); 

JsonObjectRequest request_json = new JsonObjectRequest(URL, new JSONObject(params), 
     new Response.Listener<JSONObject>() { 
      @Override 
      public void onResponse(JSONObject response) { 
       try { 
        //Process os success response 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       VolleyLog.e("Error: ", error.getMessage()); 
      } 
     }); 

// add the request object to the queue to be executed 
ApplicationController.getInstance().addToRequestQueue(request_json); 

ПРИМЕЧАНИЕ: HashMap может иметь пользовательские объекты в качестве значения

Вариант 2:

Непосредственно с помощью JSON в теле запроса

try { 
    RequestQueue requestQueue = Volley.newRequestQueue(this); 
    String URL = "http://..."; 
    JSONObject jsonBody = new JSONObject(); 
    jsonBody.put("firstkey", "firstvalue"); 
    jsonBody.put("secondkey", "secondobject"); 
    final String mRequestBody = jsonBody.toString(); 

    StringRequest stringRequest = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>() { 
     @Override 
     public void onResponse(String response) { 
      Log.i("LOG_VOLLEY", response); 
     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      Log.e("LOG_VOLLEY", error.toString()); 
     } 
    }) { 
     @Override 
     public String getBodyContentType() { 
      return "application/json; charset=utf-8"; 
     } 

     @Override 
     public byte[] getBody() throws AuthFailureError { 
      try { 
       return mRequestBody == null ? null : mRequestBody.getBytes("utf-8"); 
      } catch (UnsupportedEncodingException uee) { 
       VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s", mRequestBody, "utf-8"); 
       return null; 
      } 
     } 

     @Override 
     protected Response<String> parseNetworkResponse(NetworkResponse response) { 
      String responseString = ""; 
      if (response != null) { 

       responseString = String.valueOf(response.statusCode); 

      } 
      return Response.success(responseString, HttpHeaderParser.parseCacheHeaders(response)); 
     } 
    }; 

    requestQueue.add(stringRequest); 
} catch (JSONException e) { 
    e.printStackTrace(); 
} 
+0

Я просто отправлю эти параметры в почтовом методе –

+0

{ "поездки": [ { "departure_ Код ": "SYD", "arrival_code": "LON", "outbound_date": "2014-01-24", "inbound_date": "2014-01-29" } ], "adults_count" : 1, "locale": "ar" } –

+0

Я имею в виду, что вам нужно создать вспомогательные объекты и использовать их в hashmap .. – Stallion

0

это пример использует StringRequest

StringRequest stringRequest = new StringRequest(Method.POST, url, listener, errorListener) { 
    @Override 
    protected Map<String, String> getParams() throws AuthFailureError { 
     Map<String, String> map = new HashMap<String, String>(); 
     map.put("api_key", "12345"); 
     map.put("ts_code", "12345"); 
     return map; 
    } 
}; 
+0

Как это решить проблему тело запроса POST является JSON – OBX

+0

@ Ricky.Lee?. я не прошу api_k ey и ts_code .api_key и ts_code add url свяжут свой рабочий тон ..я спрашиваю о JSon данных, таких как отключение [{}] –

-2
OkHttpClient okHttpClient = new OkHttpClient(); 
ContentValues values = new ContentValues(); 
      values.put(parameter1Name, parameter1Value); 
      values.put(parameter2Name, parameter2Value); 

      RequestBody requestBody = null; 

      if (values != null && values.size() > 0) { 
       FormEncodingBuilder formEncoding = new FormEncodingBuilder(); 

       Set<String> keySet = values.keySet(); 
       for (String key : keySet) { 
        try { 
         values.getAsString(key); 
         formEncoding.add(key, values.getAsString(key)); 

        } catch (Exception ex) { 
         Logger.log(Logger.LEVEL_ERROR, CLASS_NAME, "getRequestBodyFromParameters", "Error while adding Post parameter. Skipping this parameter." + ex.getLocalizedMessage()); 
        } 
       } 
       requestBody = formEncoding.build(); 
      } 

      String URL = "http://example.com"; 
      Request.Builder builder = new Request.Builder(); 
      builder.url(URL); 
      builder.post(requestBody); 
      Request request = builder.build(); 
      Response response = okHttpClient.newCall(request).execute(); 
+0

я просто размещаю эти ценности { "поездки": [ { "departure_code": "SYD", "arrival_code": "LON", "outbound_date": "2014-01-24", "inbound_date": "2014-01-29" } ], "adults_count": 1, "локаль": "ар" } –

+0

@Pawandeep Каур попросил залпа а не Okhttp, где обе являются совершенно разными библиотеками в их формате – Anup