我正在使用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”。可能是什么原因?
提前致谢!
答案 0 :(得分:0)
即使我也遇到了同样的问题,截击默认连接超时设置为 5秒,并且已发布两次,因此请检查右侧的postman中的时间(如果接近5000ms或更大的可能是问题所在。 我的问题得到解决,方法是在Volley请求中添加以下内容:
DefaultRetryPolicy retryPolicy = new DefaultRetryPolicy(0, -1, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
jsonObjectRequest.setRetryPolicy(retryPolicy);
如果您要设置自定义重试策略,请查看此帖子Change Volley timeout duration