Android volley JsonObjectRequest que no devuelve ningún cuerpo sólo 200

Cómo hacer una solicitud JSON en volley donde necesito enviar un encabezado de autenticación y un objeto JSON en el cuerpo y espero sólo un código de estado 200 respuesta

JsonObjectRequest request = new JsonObjectRequest( method, url, myJsonObject, responseListener, errorListener) { @Override public Map<String, String> getHeaders() throws AuthFailureError { HashMap<String, String> headers = new HashMap<String, String>(); String creds = String.format("%s:%s", login, password); String auth = "Basic " + Base64.encodeToString(creds.getBytes(), Base64.DEFAULT); headers.put("Authorization", auth); return headers; } }; new Response.Listener<String>(){ @Override public void onResponse(String response) { Toast.makeText(getActivity(), response, 1000).show(); } 

He intentado diferentes tipos de oyentes de respuesta con cadena o objeto JSON, objeto, pero siempre hay un error: android volley org.json.JSONException: Fin de la entrada en el carácter 0 de

¿O hay algún otro tipo de solicitud en volley que apoya y json objeto y autenticación encabezado en el cuerpo y la respuesta es sólo un código de estado http?

Sé que es una vieja pregunta, pero pensé que aún responder a esto como mi respuesta podría ayudar a la gente en el futuro –

Necesita crear una clase personalizada que extienda la clase Solicitud y en esa clase anule estos métodos

  @Override protected Response parseNetworkResponse(NetworkResponse response) { return Response.success(response.statusCode, HttpHeaderParser.parseCacheHeaders(response)); } @Override protected void deliverResponse(Integer statusCode) { mListener.onResponse(statusCode); } 

Este es el corazón y el alma de la clase.

Para el código completo y la explicación, echa un vistazo a mi blog sobre el tema –

Cómo obtener un estado de respuesta del servidor 200 de Android Volley library

Enlace 1

Espero que ayude, gracias

Gracias a Varundroid ya Itai Hanski. Es correcto, sólo tiene que subclase el JsonObjectRequest.

Para mayor comodidad aquí está mi anulación:

 public class MyJsonObjectRequest extends JsonObjectRequest { @Override protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) { try { String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); // here's the new code, if jsonString.length() == 0 don't parse if (jsonString.length() == 0) { return Response.success(null, HttpHeaderParser.parseCacheHeaders(response)); } // end of patch return Response.success(new JSONObject(jsonString), HttpHeaderParser.parseCacheHeaders(response)); } catch (UnsupportedEncodingException e) { return Response.error(new ParseError(e)); } catch (JSONException je) { return Response.error(new ParseError(je)); } } } 

Así que sólo uso que en lugar de JsonObjectRequest . No es demasiado bonita, ni demasiado fea.

JsonObjectRequest se utiliza cuando espera que la respuesta de red sea un objeto JSON. Puesto que usted no está esperando eso, usted no debe usarlo.

Volley viene con algunos tipos populares predefinidos de solicitudes de facilidad de uso, pero siempre puedes crear tu propio. Sugiero hacer una solicitud personalizada basada en JsonObjectRequest , pero con una implementación diferente del método parseNetworkResponse() que no espera que la respuesta sea un objeto JSON, ya que no está recibiendo uno. Puede agregar cualquier otro cambio que necesite allí.

No es necesario crear una clase personalizada que extienda Solicitud como @varundroid declarado. Sólo puede anular el método parseNetworkResponse lugar del método onResponse y devolver la respuesta de éxito con JSONObject vacío ().

El siguiente es el código que estoy usando para superar el mismo problema que enfrentas. Espero que esto te ayude también

 @Override protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) { if (response != null && response.data.length == 0) return Response.success(new JSONObject(), null); else return super.parseNetworkResponse(response); } 
  • Error de puntero nulo en la tarea asíncrona
  • Cómo configurar la cadena de respuesta JSON formateada en un TextView?
  • Transmisión de datos de una actividad a otra mediante bundle - no se muestra en la segunda actividad
  • ¿Cómo funciona GCM? (Mensajería en la nube google para Android)
  • Android Firebase - No se puede recibir correctamente JSON de la instantánea de Firebase
  • guardar una cadena en la memoria interna y luego mostrarla
  • Serialización Gson dependiendo del valor del campo
  • Cómo comprimir un JSONObject enviarlo sobre Http en Android?
  • Cómo pasar cadena en 'Body' Parámetro de Retrofit 2 en android
  • Phonegap - No se puede abrir la URL del recurso: file: ///android_asset/www/cordova_plugins.json
  • Enviando cadena UTF-8 usando HttpURLConnection
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.