【问题标题】:Request Delete using Volley Android使用 Volley Android 请求删除
【发布时间】:2016-04-12 02:09:36
【问题描述】:

我尝试使用 Volley 将 DELETE 请求发送到带有 X-user-email 和 X-User-token 等参数的 REST Api。我在 Internet 上几乎尝试了所有方法,但仍然收到 400 错误消息。

当我使用 POST 请求它的工作时,我认为它与 DELETE 相同,我只是改变了:

(Request.Method.POST, url, params, new Response.Listener<JSONObject>() {...}

通过

(Request.Method.DELETE, url, params, new Response.Listener<JSONObject>() {...}

下面是我的代码:

MainActivity.java

disconnect.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {;
                JSONObject params = new JSONObject();
                try {
                    params.put("X-User-Email", "test@test.com");
                    params.put("X-User-Token", "QwerTyuI789IOP");
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                NetworkManager.getInstance(v.getContext()).delete("http://10.0.2.2:3000/users/sign_out", params, new NetworkManager.NetworkManagerListener<String>()  {
                    @Override
                    public void getResult(String response)
                    {
                        if (!response.isEmpty())
                        {
                            result.setText(response.toString());
                            Log.e("Response", response.toString() );
                        }
                    }
                });
            }
        });

NetworkManager.java

public void delete(String url, JSONObject params, final NetworkManagerListener<String> listener) {
        JsonObjectRequest request = new JsonObjectRequest
                (Request.Method.DELETE, url, params, new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        Log.d(TAG + ": ", "delete onResponse : " + response.toString());
                        if (null != response.toString())
                            listener.getResult(response.toString());
                    }
                }, new Response.ErrorListener() {

                    @Override
                    public void onErrorResponse(VolleyError error) {
                        if (null != error.networkResponse) {
                            Log.d(TAG + ": ", "delete Error Response code: " + error.networkResponse.statusCode);
                            listener.getResult(error.toString());
                        }
                    }
                }) {
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                Map<String, String> params = new HashMap<String, String>();
                params.put("Accept", "application/json");
                params.put("Content-type", "application/json");
                return params;
            }
        };
        ;
        requestQueue.add(request);
    }

你知道如何解决这个问题吗?谢谢你读我。

【问题讨论】:

    标签: android android-volley


    【解决方案1】:

    因为 DELETE 请求会忽略正文数据,所以您应该创建一个CustomHurlStack 类。

    请在以下 SO 问题中阅读更多我的答案:

    Delete Request With header and Parametes Volley

    或者试试my GitHub sample project。希望对您有所帮助!

    【讨论】: