Android Volley Post Request - обходной путь для JsonArrayRequest

Я понимаю, что запросы POST с использованием JsonArrayRequest недоступны из коробки с Volley, но я видел этот пост здесь, в котором говорилось о добавлении конструктора для обработки этого. Их реализация была такой:

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

Как мне добавить это в качестве конструктора? В приведенном выше вопросе упоминается его размещение в библиотеке инструментов Volley. Я импортировал Volley как .jar, поэтому я не уверен, как добавить такой конструктор, или это лучший подход. Любая помощь горячо приветствуется.

ИЗМЕНИТЬ

Я создал следующий класс с переопределением и конструктором, как было предложено. Вот класс:

public class PostJsonArrayRequest extends JsonArrayRequest {

    @Override
    protected Map<String, String> getParams() throws AuthFailureError {
        HashMap<String, String> params = new HashMap<String, String>();
        params.put("name", "value");
        return params;
    }

    public PostJsonArrayRequest(int method, String url, JSONObject jsonRequest,
            Listener<JSONArray> listener, ErrorListener errorListener) {
        super(Method.POST, url, null, listener, errorListener);
    }
}

На линии с вызовом супер я получаю The constructor JsonArrayRequest(int, String, null, Response.Listener<JSONArray>, Response.ErrorListener) is undefined

Как мне это исправить?


person settheline    schedule 23.06.2014    source источник
comment
Подкласс JsonArrayRequest, вместо него поместите конструктор   -  person panini    schedule 23.06.2014


Ответы (1)


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

@Override
protected Map<String, String> getParams() throws AuthFailureError {
    HashMap<String, String> params = new HashMap<String, String>();
    params.put("name", "value");
    return params;
}

и добавляем новый конструктор и в нем вызываем

super(Method.POST, url, null, listener, errorListener);

или используйте этот класс

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 EC84B4    schedule 23.06.2014
comment
Спасибо за ответ. Я создал класс для расширения JsonArrayRequest, добавил переопределение для Map и добавил конструктор, как в вашем примере. Я обновил свой вопрос кодом. Я получаю сообщение об ошибке (опубликовано выше). - person settheline; 23.06.2014