Android Volley Request with Body

Възможно ли е да се изпрати прост текст в тялото на 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 не изпраща тялото за ИЗТРИВАНЕ по подразбиране. Само за POST, PUT и PATCH. Меко казано жалко

Има заобиколно решение за това, посочено тук: Залпове - как да изпратите параметри на заявка за ИЗТРИВАНЕ?

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, всичко изглежда работи, така че сървърът ми е наред. Някаква друга идея как да накарате Volley да изпрати тялото? - person Unknown User; 05.09.2015
comment
Не чувам за други методи. - person dieter_h; 05.09.2015

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