Volley Server Error con null Respuesta de red

Cada vez que intento utilizar el método POST con Volley, consigo el error del corte. Consigo el valor nulo en getCause, y un cierto valor del defecto en getNetworkResponse.toString ().

Si utilizo el método GET, esto funciona bien (tengo respuesta de mi url).

¿Puede alguien ayudarme qué puedo hacer?

Map<String, String> jsonParams = new HashMap<String, String>(); jsonParams.put("teststr", "abd"); RequestQueue requestQueue = VolleySingleton.getInstance().getRequestQueue(); JsonObjectRequest request = new JsonObjectRequest( Request.Method.POST, url, new JSONObject(jsonParams), new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { try { Toast.makeText(getApplicationContext(), "Success"+response.toString(), Toast.LENGTH_LONG).show(); }catch(Exception e){ Toast.makeText(getApplicationContext(), "JSON ERROR", Toast.LENGTH_LONG).show(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.d("abd", "Error: " + error + ">>" + error.networkResponse.statusCode + ">>" + error.networkResponse.data + ">>" + error.getCause() + ">>" + error.getMessage()); } }) { @Override protected Map<String,String> getParams() { HashMap<String, String> params = new HashMap<String, String>(); params.put("key", "value"); return params; } @Override public Map<String, String> getHeaders() throws AuthFailureError { HashMap<String, String> headers = new HashMap<String, String>(); headers.put("Content-Type", "application/json; charset=utf-8"); return headers; } }; requestQueue.add(request); 

Registro de errores:

Error: Error: com.android.volley.ServerError >> 404 >> [B @ 42b1e0d0 >> null >> null

UPDATE: networkResponse.statusCode viene como 404, aunque la url es accesible (y devolver datos si sólo uso el método GET). Si elimino la parte del encabezado en el método POST, sigue siendo la misma.

La url:

 <?php $response = array(); $jsonString = file_get_contents('php://input'); $jsonObj = json_decode($jsonString, true); if(!isset($jsonObj['teststr'])){ $response["msg"] = "No data."; }else{ $response["msg"] = "Success: ".$jsonObj['teststr']; } echo json_encode($response); ?> 

En primer lugar, intente asegurarse de que su servidor funciona bien. Puede utilizar Postman (cromo plug-in) o cualquier otra forma de enviar una solicitud de correos a la url y ver lo que responde.

Después de asegurarse de que no hay ningún problema con su servidor, vamos a resolver el problema con volley.

Hay algún problema con JsonObjectRequest cuando se utiliza el método POST. Como este Volley JsonObjectRequest Publicar solicitud no funciona .

Le sugiero que use StringRequest primero y sobrescriba el método getParams como lo hizo antes. Después de sobrevivir a esta tarea, puede tratar de escribir su propia solicitud, no muy difícil, pero muy útil.

También sugiero add request.setShouldCache(false) before requestQueue.add(request); . De forma predeterminada, volley guarda la respuesta en su caché y este comportamiento puede causar algún problema extraño.

Bueno, creo que primero puedes imprimir el responseCode en tu logcat

Añadir este código antes de añadir a la cola

Request.setRetryPolicy (new DefaultRetryPolicy (0, -1, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

A veces, la solicitud es tiempo de espera antes de que su php ejecutado por completo. Así que intente este código. Tal vez puede ayudar

Volley no maneja intrínsecamente POST método Params perfectamente por lo que necesita para crear una respuesta personalizada.

La respuesta es publicada por katwal-Dipak en otro post similar a esto. https://stackoverflow.com/a/31532955/4969957

Que está funcionando perfectamente.

Tal vez esté relacionado con su operador …

Tengo el mismo problema enviando a JasonObject con Volley.

He probado mi aplicación en 9-10 dispositivos con dos operadores diferentes.

La solicitud en un operador devuelve un error con todos los datos nulos o en blanco en él, en el otro todo funciona bien y obtengo mi respuesta de la API con éxito.

No tengo ni idea de qué hacen los operadores que causan este problema … Tal vez utilizan algún tipo de firewall que bloquea el envío de JsonObject.

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