Android Volley请求与身体

时间:2015-09-02 15:29:58

标签: android request android-volley delete-method

是否可以使用DELETE-Method?

在StringRequest的主体中发送简单文本

我找不到任何有人把某事放在请求正文中的例子...... 这是我的要求,我想在主体中添加“{'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;
        }
    };

3 个答案:

答案 0 :(得分:3)

试试这个:

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

答案 1 :(得分:2)

这是因为Volley默认情况下不会发送Body for DELETE。仅适用于POST,PUT和PATCH。不幸的是至少可以说

此处列出了一种解决方法:Volley - how to send DELETE request parameters?

答案 2 :(得分:0)

StringRequest stringRequest = new StringRequest(StringRequest.Method.PUT,
            BASE_URL + "/addItem",
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    Log.d(TAG, response);
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                //handle error
                }
            }) {
        @Override
        public byte[] getBody(){
            String jsonString = json to send;
            return jsonString.getBytes();
        }
        @Override
        public String getBodyContentType() {
            return "application/json";
        }
    };
    MyRequestQueue.getInstance().addRequest(stringRequest);