· Miler Roque · Android · 2 min lectura
Cómo recibir un JSONArray en Android y Java enviando un JSONObject con Volley y JsonArrayRequest
Cómo usar Volley y JsonArrayRequest en Android y Java para enviar un JSONObject y recibir un JSONArray, detallando la configuración de Volley y el manejo de la respuesta del servidor.
Descripción
Cuando trabajamos con Android y necesitamos consumir servicios web, a menudo utilizamos Volley como biblioteca de conexión HTTP debido a su fácil implementación o porque así lo aprendimos.
Es en este contexto que cuando intentamos recibir un objecto de tipo JSONArray, VOLLEY, haciendo de su clase JsonArrayRequest solamente nos permite enviar como parámetro ya sea por GET o POST un objeto del mismo tipo que se pretende recibir. Si tienes el mismo problema de enviar un objeto de JSONObject en ves de JSONArray, aquí te dejo una sencilla clase adaptada de las que tiene VOLLEY.
Código
//JsonArrayRequestCustom.java
//===========================
package com.mipaquete.objects;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Response;
import com.android.volley.toolbox.HttpHeaderParser;
import com.android.volley.toolbox.JsonRequest;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.UnsupportedEncodingException;
public class JsonArrayRequestCustom extends JsonRequest<jsonarray> {
public JsonArrayRequestCustom(int method, String url, JSONObject jsonRequest,
Response.Listener<jsonarray> listener, Response.ErrorListener errorListener) {
super(method, url, (jsonRequest == null) ? null : jsonRequest.toString(), listener,
errorListener);
}
@Override
protected Response<jsonarray> parseNetworkResponse(NetworkResponse response) {
try {
String jsonString = new String(response.data,
HttpHeaderParser.parseCharset(response.headers, PROTOCOL_CHARSET));
return Response.success(new JSONArray(jsonString),
HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
} catch (JSONException je) {
return Response.error(new ParseError(je));
}
}
}
//Método de consulta
public void getData(Context ctx, JSONObject parametros) {
RequestQueue requestQueue = Volley.newRequestQueue(ctx);
//import com.mipaquete.objects.JsonArrayRequestCustom;
JsonArrayRequestCustom jsonArrayRequest = new JsonArrayRequestCustom(
Request.Method.POST,
url, //Variable URL
parametros, //JSONObject
new Response.Listener>JSONArray>() {
@Override
public void onResponse(JSONArray s) {
System.out.println(s.toString());
}
},new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
});
requestQueue.add(jsonArrayRequest);
}