Волейбол, не вызывающий getParams () для стандартного запроса POST

Я пытаюсь опубликовать некоторые параметры в моем rails API, используя Volley в Android. Это код:

Я попробовал два оператора журнала: один в getParams() и другой в getHeaders() . Один в getHeaders() регистрируется, а другой – нет. Почему волейбол игнорирует getParams() ?

 { //full_name,email,password are private variables defined for this class String url = "http://10.0.2.2:3000/users/sign_up.json" ; JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, url, null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { Log.d(TAG, response.toString()); pDialog.hide(); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { VolleyLog.d(TAG, "Error: " + error.getMessage()); pDialog.hide(); } }) { @Override public Map<String, String> getParams() { Map<String, String> params = new HashMap<String, String>(); //This does not appear in the log Log.d(TAG,"Does it assign params?") ; params.put("name", full_name.getText().toString()); params.put("email",email.getText().toString()); params.put("password", password.getText().toString()); return params; } @Override public Map<String, String> getHeaders() throws AuthFailureError { //This appears in the log Log.d(TAG,"Does it assign headers?") ; HashMap<String, String> headers = new HashMap<String, String>(); headers.put("Content-Type", "application/json; charset=utf-8"); return headers; } }; // Adding request to request queue VHelper.getInstance().addToRequestQueue(jsonObjReq, tag_json_obj); } 

Solutions Collecting From Web of "Волейбол, не вызывающий getParams () для стандартного запроса POST"

Использование StringRequest вместо JsonObjectRequest

 StringRequest sr = new StringRequest(Request.Method.POST, url , new Response.Listener<String>() { @Override public void onResponse(String response) { Log.d(TAG, response.toString()); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { VolleyLog.d(TAG, "Error: " + error.getMessage()); Log.d(TAG, ""+error.getMessage()+","+error.toString()); } }){ @Override protected Map<String,String> getParams(){ Map<String, String> params = new HashMap<String, String>(); params.put("id", "28"); params.put("value", "1"); return params; } @Override public Map<String, String> getHeaders() throws AuthFailureError { Map<String,String> headers = new HashMap<String, String>(); headers.put("Content-Type","application/x-www-form-urlencoded"); headers.put("abc", "value"); return headers; } }; AppController.getInstance().addToRequestQueue(sr); 

Пожалуйста, переопределите метод getBody (), и если ваш сервер не может обрабатывать параметр запроса JSON, вы должны переопределить метод getHeaders (), чтобы изменить свой Content-Type.

Проблема может быть найдена здесь: https://github.com/mcxiaoke/android-volley/issues/82

Третий параметр должен быть JSONObject, который вам не нужен, метод getParams () просто передает их в запрос.

  JsonObjectRequest jsonObjReq = new JsonObjectRequest( method, url, jsonObjParams, // <<< HERE responseListener, errorListener); 

Для JSONobjectRequest getParams () не работает для запросов POST, поэтому вы должны сделать customRequest и переопределить метод getParams (). Его потому, что JsonObjectRequest расширен JsonRequest, который напрямую переопределяет метод getBody (), поэтому ваш getParam () никогда не будет вызывать. Чтобы вызвать метод getParams (), вам сначала нужно переопределить getBody (). Или для простого решения вы можете использовать StringRequest.

Это произошло из-за того, что волейбол задает кеш.

Очистите его так

requestQueue.getCache().clear();

Надеюсь, что это полезно!