Android Volley - сделать POST с параметрами body и url - getParams и getBody одновременно

У меня есть простой вопрос, какой метод вызывать на POST и какой метод вызывать на GET.

Это мой простой класс:

public class CustomStringRequest extends Request<CustomNetworkResponse> {

private final Map<String, String> headers;
private final Map<String, String> params;
private final String body;
private final Response.Listener<CustomNetworkResponse> listener;


public CustomStringRequest(int method,
                           String url,
                           Map<String, String> headers,
                           Map<String, String> params,
                           String body,
                           Response.Listener<CustomNetworkResponse> listener,
                           Response.ErrorListener errorListener) {

    super(method, url, errorListener);
    this.headers = headers;
    this.params = params;
    this.body = body;
    this.listener = listener;
}



@Override
public Map<String, String> getHeaders() throws AuthFailureError {
    return headers != null ? headers : super.getHeaders();
}

@Override
public Map<String, String> getParams() {
    return params;
}

@Override
public byte[] getBody() throws AuthFailureError {
    return body != null ? body.getBytes() : null;
}

Как я могу использовать getParams() и getBody() одновременно? Возможно ли это, потому что когда я проверяю супер реализацию, я предполагаю, что это невозможно.

Я также закомментировал метод getBody(), чтобы увидеть, что это правда.

Означает ли это, что я не могу отправить POST с параметрами body и url? Параметры URL предназначены для использования в GET-запросе? Это стандарт?

2 ответа

Ну, я не уверен, каковы ваши намерения с этим! Вы всегда можете добавить URL с вашими параметрами URL (если параметры настолько просты). И тогда вы можете использовать getParams() или же getBody() передать более сложные параметры.

Я думаю, что разница между этими двумя заключается в кодировании ваших параметров во время их прохождения по сети (хотя я не уверен на 100% в этом), но да. getBody() более безопасный.

ОБНОВЛЕНИЕ: Хорошо, я был очень смущен. Это даже близко не к правильному ответу. Но я держу это здесь как пример неправильного объяснения.

Это очень старый вопрос, но такая ситуация произошла со мной. Вполне вероятно, что это случилось и с другими. Думаю, я нашел решение.

Метод вызывает, сохраняя параметры в процессе. Это ключ.

Когда вы переопределяете, ваш метод не может вызвать и сохранить параметры в . Таким образом, эти параметры фактически заменяются содержимым .

Ваше решение должно быть примерно таким (приблизительное - я просто набираю текст, а не копирую из редактора):

      @Override
public byte[] getBody() throws AuthFailureError {
    String newBody = super.getBody();
    if (body != null) {
        return newBody + body.getBytes();
    }
    return newBody;
}

Этот код получает текущее тело, которое является параметрами, и добавляет ваше новое тело в его конец. Не тестировал, поэтому я не знаю, действительно ли это работает, но это должно помочь вам двигаться в правильном направлении.

Другие вопросы по тегам