Способ публикации с использованием неработающего волейбола

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

 { userID : '-988682425884628921', email :'aditya@vyas.com', passwd : '123ss' } 

Я использую метод POST для отправки данных, я уже проверяю DHC, Api работает нормально в DHC, и я получаю JSON Response , но когда я пытаюсь с Volley, я не могу получить ответ. И даже никаких ошибок в моем logcat.

Код JAVA

  RequestQueue mVolleyQueue = Volley.newRequestQueue(this); CustomRequest req = new CustomRequest(Request.Method.POST,url,null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { Log.v("tag","login response " + response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.v("tag","login error response " + error.getMessage()); } }){ @Override public Map<String, String> getParams() throws AuthFailureError { Map<String, String> params = new HashMap<String, String>(); params.put("userID", "-988682425884628921"); params.put("email", "aditya@vyas.com"); params.put("passwd", "123ss"); return params; } @Override public Map<String, String> getHeaders() throws AuthFailureError { Map<String, String> headers = new HashMap<String, String>(); headers.put("Content-Type", "application/json; charset=utf-8"); return headers; } }; mVolleyQueue.add(req); 

ошибка

 05-28 09:20:14.696 2450-2468/com.android.msahakyan.expandablenavigationdrawer E/tag﹕ parseNetworkError is ! null 05-28 09:20:14.697 2450-2468/com.android.msahakyan.expandablenavigationdrawer E/tag﹕ parseNetworkError status code : 400 05-28 09:20:14.697 2450-2468/com.android.msahakyan.expandablenavigationdrawer E/tag﹕ parseNetworkError message : <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd"> <HTML><HEAD><TITLE>Bad Request</TITLE> <META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD> <BODY><h2>Bad Request - Invalid Header</h2> <hr><p>HTTP Error 400. The request has an invalid header name.</p> </BODY></HTML> } 

Решила вашу проблему. Просто использовал JsonArrayRequest и передал параметры в форме JsonObject :

  Map<String, String> params = new HashMap<String, String>(); params.put("userID", "userid"); params.put("email","email"); params.put("passwd", "password"); JsonArrayRequest request = new JsonArrayRequest(Request.Method.POST, "url", new JSONObject(params), new Response.Listener<JSONArray>() { @Override public void onResponse(JSONArray response) { System.out.println("response -->> " + response.toString()); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { System.out.println("change Pass response -->> " + error.toString()); } }); request.setRetryPolicy(new DefaultRetryPolicy(60000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); Volley.newRequestQueue(activity).add(request); 

Нет необходимости переопределять getParams() или getHeaders() .

Проблема: 1 Вы получали код ответа 500, потому что сервер принимал params как JsonObject и мы пытаемся JsonObject String .

Проблема: 2 Вы использовали JsonObjectRequet но ответ с сервера был в JsonArray поэтому вам нужно использовать JsonArrayRequest чтобы принять ответ в JsonArray

Попробуйте и дайте мне знать, что это помогает или нет 🙂

У меня была аналогичная проблема. Я переписал Content-Type в методе getHeaders:

headers.put("Content-Type", "application/json; charset=UTF-8");

Но сам Volley добавил параметр Content-Type, поэтому были два из этих параметров. Удаление линии решило мою проблему.

Вам необходимо переопределить protected Map<String, String> getParams() для передачи параметров в POST.

  JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, url, params, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { Log.d("Login Response", response.toString()); hidepDialog(); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { System.out.println(error.getStackTrace()); VolleyLog.d("ErrorVolley", "Error: " + error.getStackTrace()); hidepDialog(); } }) { @Override protected Map<String, String> getParams() { Map<String, String> params = new HashMap<String, String>(); params.put("userID", "2")); params.put("email","aa@a.kl"); params.put("passwd", "ddddd"); return params; } }; 

Остерегайтесь заголовка содержимого. Volley обрабатывает его иначе, чем другие заголовки, и не отображается в Map <> Headers. Вместо того чтобы переопределять метод getHeaders () для установки типа содержимого, вы должны переопределить getBodyContentType () следующим образом:

 @Override public String getBodyContentType() { return "application/json; charset=utf-8"; }