【问题标题】:Send a DELETE Request using Volley (Android) to a REST Api with parameters?使用 Volley (Android) 将 DELETE 请求发送到带有参数的 REST Api?
【发布时间】:2015-01-28 20:02:43
【问题描述】:

如何使用 Volley (Android) 将 DELETE 请求发送到带有 access_token 和用户名等参数的 REST Api。我几乎在 Internet 上尝试了所有方法,但仍然收到 400 错误消息。 我曾尝试使用 PostMan 发送相同的 DELETE 请求,并且效果很好。

这是错误: E/Volley:[1112] BasicNetwork.performRequest:http://myserverip/messages/2 的意外响应代码 400

这是我正在使用的 Java 代码:

String URI = "http://myserverip/messages/2";

JsonObjectRequest request = new  JsonObjectRequest(Request.Method.DELETE,URI,null,
                                    new Response.Listener<JSONObject>() {
                                        @Override
                                        public void onResponse(JSONObject response) {

Toast.makeText(contextm,response.toString(),Toast.LENGTH_SHORT).show();

                                        }
                                    },
                                    new Response.ErrorListener() {
                                        @Override
                                        public void onErrorResponse(VolleyError error) {


                                        }


                                    }){

                                @Override
                                public Map<String, String> getHeaders() throws AuthFailureError {
                                    Map<String, String> headers = super.getHeaders();

                                    if (headers == null
                                            || headers.equals(Collections.emptyMap())) {
                                        headers = new HashMap<String, String>();
                                    }

                                    headers.put("access_token", "access_token");
                                    headers.put("username", "username");


                                    return headers;
                                }
                            };

                            MyApp.getInstance().addToRequestQueue(request);

可能不是很有用,但这里是 PostMan

的有效 DELETE 请求预览
  • 删除 /messages/1 HTTP/1.1
  • 主机:服务器IP地址
  • 缓存控制:无缓存
  • 内容类型:application/x-www-form-urlencoded

    access_token=SPAVYaJ7ea7LzdeQYrBTsIRssuGbVpJI8G9XSV0n&username=whit3hawks

【问题讨论】:

    标签: android rest android-volley


    【解决方案1】:

    如果您将以下内容而不是 null 放在 ... new JsonObjectRequest(Request.Method.DELETE,URI,null,new Response.Listener&lt;JSONObject&gt;() { ... 中,您可以轻松实现此目的

    final JSONObject object = new JSONObject();
    
    try {
        object.put("access_token", "SPAVYaJ7ea7LzdeQYrBTsIRssuGbVpJI8G9XSV0n");
        object.put("username", "whit3hawks");
    } catch (Exception e) {
        e.printStackTrace();
    }
    

    所以您的请求应如下所示: ... new JsonObjectRequest(Request.Method.DELETE,URI,object,new Response.Listener&lt;JSONObject&gt;() { ...

    您很久以前就发布过,但也许其他人会需要这个时间。

    【讨论】:

      【解决方案2】:

      我在使用此代码的 DELETE 时成功发送了 volley 标头:

      @Override
      public Map<String, String> getHeaders() throws AuthFailureError {
      HashMap<String, String> headers = new HashMap<String, String>();
      headers.put("Content-Type", "application/json");
      return headers;
      

      刚刚试了一下,效果很好。

      编辑:

      如果您使用的是 Mac,请尝试与 Charles 核实您发送的具体内容, 在 PC 上你可以试试 fiddler。

      此外,错误 400 表示“输入错误”,因此服务器获取的信息要么超出预期,要么低于预期。 请记住,Volley 中的 DELETE 充当 GET,请确保您发送的请求是空的。

      希望以某种方式有所帮助..快乐编码

      【讨论】:

      • 那我应该把access token参数和username参数放在哪里呢?
      • 在标题中添加行,headers.put("", "") 并放置您想要的内容,标题您可以发送您想要的任何信息。但请求的正文必须为空
      猜你喜欢
      • 1970-01-01
      • 2014-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-06
      相关资源
      最近更新 更多