Android Volley请求(带有正文内容)

4

在使用DELETE方法发送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;
        }
    };

编写自己的请求并覆盖 getBody()getBodyContentType() 方法。 - dieter_h
如果你的服务器端是Asp.Net WebAPI,我认为你应该阅读这个问题和另一个问题。也许其他的Web服务也是一样的。第一个问题第二个问题 - BNK
谢谢两位的回答! @dieter_h,您能发一个快速的代码示例吗? - Unknown User
1
现在我正在工作。稍后我会发布完整的答案。 - dieter_h
我发布了一个答案,但它只是我之前做过的这个答案的副本:https://dev59.com/e2Ag5IYBdhLWcg3wwdPA#31638943(如果您使用我在那里编写的代码,您将能够解决您的问题) - Laurent Meyer
如果您仍然想找到一个可行的解决方案,请阅读 https://github.com/ngocchung/DeleteRequest :) - BNK
3个回答

4

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 字符串。


谢谢你的回答,但是请求体仍然被忽略了。如果我在Postman中使用DELETE方法,一切似乎都正常,因此我的服务器没有问题。 还有其他什么想法可以让Volley发送请求体吗? - Unknown User
我没有听说过其他的方法。 - dieter_h

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);

1
当您分享代码片段作为答案时,请尝试解释它。 - Yunus Temurlenk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接