Запрос Android Volley с телом

Можно ли отправить простой текст в теле StringRequest с помощью метода DELETE?

Я не смог найти ни одного примера, когда кто-то помещал что-то в тело запроса... Это мой запрос, и я хочу добавить в тело "{'deviceid':'xyz'}" (метод DELETE):

final StringRequest stringRequest = new StringRequest(method, url + "?token=" + token, new Response.Listener<String>() {
        @Override
        public void onResponse(String jsonResponse) {
            // do something
    }, new Response.ErrorListener() {
            // do something
        }
    }) {

        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            HashMap<String, String> headers = new HashMap<String, String>();
            headers.put("api-version", "1");

            return headers;
        }
    };

person Unknown User    schedule 02.09.2015    source источник
comment
Напишите свой запрос и override getBody() и getBodyContentType() методы.   -  person dieter_h    schedule 02.09.2015
comment
Если ваша серверная сторона - Asp.Net WebAPI, IMO, вы должны прочитать этот вопрос и другой вопрос. Возможно, другой веб-сервис такой же   -  person BNK    schedule 03.09.2015
comment
Спасибо за оба ответа! @dieter_h Не могли бы вы опубликовать быстрый пример кода, пожалуйста?   -  person Unknown User    schedule 03.09.2015
comment
Сейчас я на работе. Позже я опубликую полный ответ.   -  person dieter_h    schedule 03.09.2015
comment
Я опубликовал ответ, но это только копия этого ответа, который я уже сделал: stackoverflow.com/questions/23220695/ (если вы используете код, который я написал там, вы уметь решать свою проблему)   -  person Laurent Meyer    schedule 03.09.2015
comment
Пожалуйста, прочитайте github.com/ngocchung/DeleteRequest, если вы все еще хотите найти работающее решение :)   -  person BNK    schedule 09.11.2015


Ответы (3)


Это потому, что Volley не отправляет тело для DELETE по умолчанию. Только для POST, PUT и PATCH. К сожалению, мягко говоря

Здесь есть обходной путь: Volley - как отправить параметры запроса DELETE?

person Chris    schedule 27.10.2015

Попробуй это:

public class StringJSONBodyReqest extends StringRequest {

    private static final String TAG = StringJSONBodyReqest.class.getName();
    private final String mContent;

    public StringJSONBodyReqest(int method, String url, String content, Response.Listener<String> listener, Response.ErrorListener errorListener) {
        super(method, url, listener, errorListener);
        mContent = content;
    }


    @Override
    public Map<String, String> getHeaders() throws AuthFailureError {
        HashMap<String, String> headers = new HashMap<String, String>();
        headers.put("api-version", "1");

        return headers;
    }


    @Override
    public byte[] getBody() throws AuthFailureError {

        byte[] body = new byte[0];
        try {
            body = mContent.getBytes("UTF-8");
        } catch (UnsupportedEncodingException e) {
            Log.e(TAG, "Unable to gets bytes from JSON", e.fillInStackTrace());
        }
        return body;
    }


    @Override
    public String getBodyContentType() {
        return "application/json";
    }
}

mContent это ваш json String

person dieter_h    schedule 03.09.2015
comment
Спасибо за этот ответ, но тело по-прежнему игнорируется. Если я использую DELETE в Postman, кажется, что все работает, поэтому с моим сервером все в порядке. Любая другая идея о том, как заставить Залп отправить тело? - person Unknown User; 05.09.2015
comment
О других способах не слышал. - person dieter_h; 05.09.2015

person    schedule
comment
Когда вы делитесь фрагментом кода в качестве ответа, попробуйте объяснить его. - person Yunus Temurlenk; 13.08.2020