【问题标题】:REST request using Volley sends back a result that is different from Postman使用 Volley 的 REST 请求发回的结果与 Postman 不同
【发布时间】:2017-04-05 15:02:15
【问题描述】:

我正在使用GenericRequest(内置 jsonrequest 的扩展)对接受 json 对象并返回字符串的服务器进行 REST 调用,如果 json 对象已经存在,则该字符串为“0”否则为非零字符串。

但是,使用以下代码,无论我发送什么,我总是得到一个“0”。

    JSONObject userobj = new JSONObject();
    try {
        userobj.put("email",email);
        userobj.put("password",password);
        userobj.put("username",name);
    } catch (JSONException e) {
        e.printStackTrace();
    }
    Log.d(TAG, userobj.toString());

    GenericRequest jsonObjReq = new GenericRequest(Request.Method.POST, REGISTER_URL, String.class, userobj,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    // Handle access token.
                    Log.d(TAG, "Register received: " + response);
                    long token = Long.parseLong(response);
                    if(token == 0) {
                        Log.d(TAG, "Received 0!");
                        Toast.makeText(MainActivity.this, R.string.registerfail_toast, Toast.LENGTH_LONG).show();
                    } else {
                        Log.d(TAG, "Register success!");
                        Toast.makeText(MainActivity.this, R.string.Welcome, Toast.LENGTH_LONG).show();
                    }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.d(TAG, error.toString());
                    Toast.makeText(MainActivity.this, error.toString(), Toast.LENGTH_LONG).show();
                }
            }) {

        @Override
        public String getBodyContentType() {
            return "application/json";
        }

    };

    jsonObjReq.setRetryPolicy(new DefaultRetryPolicy(0, -1, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
    helper.add(jsonObjReq);

在 Postman 中进行测试时,输入如下: { “电子邮件”:“dlee23122”, “密码”:“1234”, “用户名”:“dlee23122” }, 它返回一个非零字符串。 (屏幕截图如下。)但是当使用 Volley 给定一个稍微不同的输入时,它会一直返回一个“0”。可能是什么原因?

提前致谢!

【问题讨论】:

  • 截取您的邮递员 http 听到的截图或在此处添加它们。 postman 不是真正的 REST 客户端。
  • @Vahidhashemi 嗨,感谢您的帮助。增加了 Postman 的截图。标头是“Content-Type”:“application/json”。
  • 原来这是Here中提到的问题。

标签: android android-volley


【解决方案1】:

即使我遇到了同样的问题,volley 默认连接超时设置为 5 秒 并且它发布了两次,因此请检查右侧邮递员的时间,如果接近 5000 毫秒或更大的这可能是问题所在。 我的问题通过在 Volley 请求中添加以下内容得到解决:

DefaultRetryPolicy retryPolicy = new DefaultRetryPolicy(0, -1, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
   jsonObjectRequest.setRetryPolicy(retryPolicy);

如果您想设置自定义重试策略,请查看此帖子Change Volley timeout duration

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-19
    • 2015-07-20
    • 2021-12-06
    • 2023-04-05
    • 1970-01-01
    • 2019-11-04
    • 2017-11-29
    • 1970-01-01
    相关资源
    最近更新 更多