· 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.

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);
}
Volver al blog

Posts relacionados

Ver todos »
Java, ¿Qué son los wrappers?

Java, ¿Qué son los wrappers?

Los wrappers en Java son clases que envuelven tipos primitivos como int, double y boolean, proporcionando métodos adicionales para trabajar con estos datos básicos.