Отправьте запрос POST JSONArray с библиотекой Android Volley

Я хочу отправить и получить массив Json с залпом. Теперь я могу получить массив, и это нормально, но я не знаю, как отправить запрос (например, с помощью метода post).

JsonArrayRequest arrayReq = new JsonArrayRequest(URL,
            new Listener<JSONArray>() {
}

person Community    schedule 22.02.2015    source источник


Ответы (3)


Вот пример:

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

Отличие POST-запроса заключается в том, что он принимает в качестве параметра JSONObject.

ИЗМЕНИТЬ 1:

Если у вас Volley установлен как проект библиотеки в вашей среде IDE, просто определите новый конструктор

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

внутри класса JsonArrayRequest, который присутствует в коде библиотеки Volley. Теперь вы можете использовать это для создания JsonArrayRequest объектов и добавления их в RequestQueue.

ИЗМЕНИТЬ 2:

1. Загрузите проект библиотеки Volley здесь. Загрузите проект и настройте его в своей среде IDE.

2. Внесите изменения в класс JsonRequest (находится в пространстве имен com.android.volley.toolbox), как описано в разделе РЕДАКТИРОВАТЬ 1.

3. Удалите volley.jar из папки libs вашего ПРИЛОЖЕНИЯ.

4. Теперь перейдите в "Свойства проекта" -> "Android" -> "Библиотека" и нажмите Добавить. Отсюда выберите проект Volley. Очистить и восстановить.

5. Теперь в своем ПРОЕКТЕ ПРИЛОЖЕНИЯ вы можете создать POST JsonArrayRequest точно так же, как мы делаем POST JsonObjectRequest и получить JSONArray в Response.

person Y.S    schedule 22.02.2015
comment
Спасибо . но я хочу получить в ответ Json Array, а не Json Object. - person ; 22.02.2015
comment
нет . У меня есть файл .jar для залпа. как это сделать, можешь показать мне? спасибо - person ; 22.02.2015

Создайте класс и расширьте JsonArrayRequest, затем переопределите

@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));
        }
    }
}
person Andriya    schedule 29.06.2015

Создайте новый класс java с именем JsonArrayPostRequest, теперь вы можете использовать его, как и в предыдущем запросе, просто замените JSONArrayRequest на JsonArrayPostRequest и передайте правильные параметры

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

    }  

} 

ИСПОЛЬЗОВАТЬ:

JsonArrayPostRequest request = new JsonArrayPostRequest(URL,new Response.Listener<JSONArray>(),             
                new Response.ErrorListener() ,params);
person Vinay Jaju    schedule 27.09.2017