Volley no llamando a getParams () para la solicitud de POST estándar

Estoy tratando de publicar algunos parámetros a mi API de carriles utilizando Volley en Android. Este es el código:

He intentado con dos declaraciones de registro, una en getParams() y otra en getHeaders() . El de getHeaders() se registra mientras que el otro no lo es. ¿Por qué volley ignorando 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); } 

Utilizar StringRequest en lugar de 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); 

Anule por favor el método getBody (), y si su servidor no puede manejar el parámetro de la petición de JSON, usted tiene que substituir el método de getHeaders () para cambiar su Content-Type.

Se puede encontrar el problema aquí: https://github.com/mcxiaoke/android-volley/issues/82

El tercer parámetro debe ser un JSONObject que no necesita el método getParams () simplemente pasarlos a la solicitud.

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

Para JSONobjectRequest el getParams () no funciona para las solicitudes POST por lo que tiene que hacer un método customRequest y sobreescribir getParams () por allí. Su porque JsonObjectRequest se extiende JsonRequest que sobreescribe método getBody () directamente, por lo que su getParam () nunca invocar. Para invocar tu método getParams () debes primero anular getBody (). O para una solución simple que puede utilizar StringRequest.

Sucedió porque Volley params caché.

Limpiarlo así

requestQueue.getCache().clear();

Espero que sea útil

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.