Me gustaría enviar y recibir un Array de Json con la volea.
Ahora puedo recibir una matriz y está bien, pero no sé cómo enviar una solicitud (Por ejemplo: con el método post).

JsonArrayRequest arrayReq = new JsonArrayRequest(URL,
            new Listener<JSONArray>() {
}
InformationsquelleAutor | 2015-02-22

4 Comentarios

  1. 2
     List<Map<String,String>> listMap =  new ArrayList<Map<String, String>>();
            Map<String,String> map  = new HashMap<String,String>();
            try {
    
                map.put("email", customer.getEmail());
                map.put("password",customer.getPassword());
    
            } catch (Exception e) {
                e.printStackTrace();
            }
            listMap.add(map);
    
            String url = PersonalConstants.BASE_URL+"/url";
            JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
                    Request.Method.POST, url, String.valueOf(new JSONArray(listMap)),
                    new Response.Listener<JSONObject>() {
                        @Override
                        public void onResponse(JSONObject jsonObject) {
                            Log.d(App.TAG, jsonObject.toString());
                        }
                    }, new Response.ErrorListener (){
    
                @Override
                public void onErrorResponse(VolleyError volleyError) {
                    Log.d(App.TAG,volleyError.toString());
                }
            }
            );
            App.getInstance().getmRequestQueue().add(jsonObjectRequest);
  2. 1

    Aquí está un ejemplo:

    //Define the web service URL
    final String URL = "http://www.someurl.com";
    
    //POST params to be sent to the server
    HashMap<String, String> params = new HashMap<String, String>();
    params.put("name", "raha tamjid");
    
    //Define the POST request
    JsonObjectRequest req = new JsonObjectRequest(URL, new JSONObject(params),
       new Response.Listener<JSONObject>() {
           @Override
           public void onResponse(JSONObject response) {
               try {
                   VolleyLog.v("Response:%n %s", response.toString(4));
               } catch (JSONException e) {
                   e.printStackTrace();
               }
           }
       }, new Response.ErrorListener() {
           @Override
           public void onErrorResponse(VolleyError error) {
               VolleyLog.e("Error: ", error.getMessage());
           }
       });
    
    //Add the request object to the queue to be executed
    ApplicationController.getInstance().addToRequestQueue(req);

    Cómo la solicitud POST que difiere es que se tarda una JSONObject como parámetro.

    EDIT 1:

    Si usted tiene Volley instalado como un proyecto de biblioteca en el IDE, a continuación, basta con definir un nuevo constructor

    public JsonArrayRequest(int method, String url, JSONObject jsonRequest,
        Listener<JSONArray> listener, ErrorListener errorListener) {
            super(method, url, (jsonRequest == null) ? null : jsonRequest.toString(), listener, errorListener);
    }

    dentro de la clase JsonArrayRequest que está presente en la Volley código de la biblioteca. Ahora, usted puede usar esto para crear JsonArrayRequest los objetos y añadirlos a la RequestQueue.

    EDIT 2:

    1. Obtener la Volea proyecto de biblioteca de aquí. Descargar el proyecto y configurar en su IDE.

    2. Hacer la modificación a la JsonRequest de la clase (que se encuentra en com.android.volley.toolbox espacio de nombres) como se discutió en la EDITAR 1.

    3. Borrar el volley.jar de la libs carpeta de su PROYECTO de APLICACIÓN de.

    4. Ahora ir a Propiedades del Proyecto -> Android -> Biblioteca y haga clic en Agregar. A partir de aquí se selecciona el Volley proyecto. Clean & Reconstruir.

    5. Ahora en su PROYECTO de APLICACIÓN de puede hacer un POST JsonArrayRequest igual cómo podemos hacer un POST JsonObjectRequest y obtener un JSONArray en el Response.

    • gracias . pero quiero llegar a Json Array en respuesta no Objeto Json .
    • ¿has probado esto ?
    • no . tengo la volea ‘s .el archivo jar . cómo hacer que me puedes enseñar ?gracias
    • ver la edición de respuesta
  3. 0

    Crear una clase y extender JsonArrayRequest a continuación, reemplazar

    @Override
    protected Map<String, String> getParams() throws AuthFailureError {
    HashMap<String, String> params = new HashMap<String, String>();
    params.put("name", "value");
    return params;
    }
    and add a new constructor and in it call
    super(Method.POST, url, null, listener, errorListener);
    or use this class
    public class PostJsonArrayRequest extends JsonRequest<JSONArray> {
    /**
    * Creates a new request.
    * @param url URL to fetch the JSON from
    * @param listener Listener to receive the JSON response
    * @param errorListener Error listener, or null to ignore errors.
    */
    public PostJsonArrayRequest(String url, Response.Listener<JSONArray> listener, Response.ErrorListener errorListener) {
    super(Method.POST, url, null, listener, errorListener);
    }
    @Override
    protected Map<String, String> getParams() throws AuthFailureError {
    HashMap<String, String> params = new HashMap<String, String>();
    params.put("name", "value");
    return params;
    }
    @Override
    protected Response<JSONArray> parseNetworkResponse(NetworkResponse response) {
    try {
    String jsonString =
    new String(response.data, HttpHeaderParser.parseCharset(response.headers));
    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));
    }
    }
    }
  4. 0

    Crear una nueva clase java llamada JsonArrayPostRequest ahora se puede utilizar como la anterior solicitud, basta con sustituir JSONArrayRequest con JsonArrayPostRequest y pasar los parámetros correctos

    public  class JsonArrayPostRequest extends Request<JSONArray>{  
    private Map<String,String> mParam;  
    private Listener<JSONArray>  mListener;  
    public JsonArrayPostRequest(String url,Listener<JSONArray> listener, ErrorListener errorListener,Map param) {  
    super(Request.Method.POST, url, errorListener);  
    mListener=listener;  
    mParam=param;   
    }  
    @Override  
    protected Map<String, String> getParams() throws AuthFailureError {  
    return mParam;  
    }  
    @Override  
    protected Response<JSONArray> parseNetworkResponse(NetworkResponse response) {  
    try {  
    String jsonString =  
    new String(response.data, HttpHeaderParser.parseCharset(response.headers));  
    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));  
    }  
    }  
    @Override  
    protected void deliverResponse(JSONArray response) {  
    mListener.onResponse(response);  
    }  
    } 

    USO:

    JsonArrayPostRequest request = new JsonArrayPostRequest(URL,new Response.Listener<JSONArray>(),             
    new Response.ErrorListener() ,params);

Dejar respuesta

Please enter your comment!
Please enter your name here