Skip to main content

Android Volley JsonArrayRequest: Recibir JSONArray Enviando como parámetro JSONObject

Cuando estamos trabajando con android y necesitamos consumir servicios web, muchas veces usamos VOLLEY como biblioteca de conexión HTTP, ya sea por 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.

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));
        }
    }
}

Ahora, para llamarlo en su método de conexión puede hacerlo de la siguiente manera:

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);
    }

One thought to “Android Volley JsonArrayRequest: Recibir JSONArray Enviando como parámetro JSONObject”

  1. Y para el caso contrario, yo estoy trabajando en un proyecto donde la api recibe un jsonArray pero devuelve un jsonObject, podrias orientarme si es posible modificar esa clase para adaptarla a mi caso.

Deja un comentario

A %d blogueros les gusta esto: