使用Volley的REST请求会发回与Postman不同的结果

时间:2017-04-05 15:02:16

标签: android android-volley

我正在使用GenericRequest(内置jsonrequest的扩展)对服务器进行REST调用,该服务器接收json对象并返回一个字符串,如果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中测试时,给出如下输入: {   “email”:“dlee23122”,   “密码”:“1234”,   “username”:“dlee23122” }, 它返回一个非零字符串。 (截图如下。)但是当使用Volley给出稍微不同的输入时,它会一直返回“0”。可能是什么原因?

提前致谢!

enter image description here

1 个答案:

答案 0 :(得分:0)

即使我也遇到了同样的问题,截击默认连接超时设置为 5秒,并且已发布两次,因此请检查右侧的postman中的时间(如果接近5000ms或更大的可能是问题所在。 我的问题得到解决,方法是在Volley请求中添加以下内容:

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

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