当我收到一个错误onerrorrepsonse android volley请求我想重试请求。我怎样才能做到这一点?重试请求onErrorResponse Android凌空
4
A
回答
7
好了,你可以创建RetryPolicy
改变默认的重试操作,只有指定timeout milliseconds
,retry count
参数:
public class YourRequest extends StringRequest {
public YourRequest(String url, Response.Listener<String> listener,
Response.ErrorListener errorListener) {
super(url, listener, errorListener);
setRetryPolicy(new DefaultRetryPolicy(DefaultRetryPolicy.DEFAULT_TIMEOUT_MS,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
}
}
的另一种方式是重新估算VolleyError,重新执行相同的请求时,如果是TimeoutError
例如:
public static void executeRequest() {
RequestQueue.add(new YourRequest("http://your.url.com/", new Response.Listener<String>() {
@Override
public void onResponse(String response) {
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
if (error instanceof TimeoutError) {
// note : may cause recursive invoke if always timeout.
executeRequest();
}
}
}));
}
你可能在这个非常时刻一个问题:“已经凌空提供了一些重试回调方法?”,答案是“没有”。但有一个基于Volley的项目调用Netroid,并且满足前面提出的问题,如果您关心这个问题,可以重试回调,您可以计算重试时间和请求执行时间,代码样式像这样:
final String REQUESTS_TAG = "Request-Demo";
String url = "http://facebook.com/";
JsonObjectRequest request = new JsonObjectRequest(url, null, new Listener<JSONObject>() {
long startTimeMs;
int retryCount;
@Override
public void onPreExecute() {
startTimeMs = SystemClock.elapsedRealtime();
}
@Override
public void onFinish() {
RequestQueue.add(request);
NetroidLog.e(REQUESTS_TAG);
}
@Override
public void onRetry() {
long executedTime = SystemClock.elapsedRealtime() - startTimeMs;
if (++retryCount > 5 || executedTime > 30000) {
NetroidLog.e("retryCount : " + retryCount + " executedTime : " + executedTime);
mQueue.cancelAll(REQUESTS_TAG);
} else {
NetroidLog.e(REQUESTS_TAG);
}
}
});
request.setRetryPolicy(new DefaultRetryPolicy(5000, 20, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
request.setTag(REQUESTS_TAG);
RequestQueue.add(request);
Netroid也有许多其他方便和强大的功能,希望能够帮到你足够:)。
0
可以设置计数器变量试图与出特定的时间使其完全递归
static int count=10; //so its will try ten time
public void userLogin(final View view)
{
final RequestQueue requestQueue= Volley.newRequestQueue(getApplicationContext());
String url = "http://192.168.43.107/mobodb/register.php";
StringRequest stringRequest=new StringRequest(Request.Method.POST,url,new Response.Listener<String>()
{
@Override
public void onResponse(String response) {
Toast.makeText(getApplicationContext(),"Updated",Toast.LENGTH_LONG).show();
}
}
},new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error) {
count=count-1;
Toast.makeText(getApplicationContext(),"Retry left"+count,Toast.LENGTH_LONG).show();
if (count>0) {
// note : may cause recursive invoke if always timeout.
userLogin(view);
}
else
{
Toast.makeText(getApplicationContext(),"Request failed pls check network connection or the error is "+error.getMessage(),Toast.LENGTH_LONG).show();
}
}
})
{
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String,String> paramter=new HashMap<String,String>();
paramter.put("name",login_name);
paramter.put("user_pass",login_pass);
return paramter;
}
};
requestQueue.add(stringRequest);
stringRequest.setRetryPolicy(new DefaultRetryPolicy(20 * 1000, 10, 1.0f));
,你也可以检查响应里面,你可以从PHP返回并处理在Java类
@Override
public void onResponse(String response) {
if(response.contains("no record found for"))
Toast.makeText(getApplicationContext(),response.toString(),Toast.LENGTH_LONG).show();
else
{
Toast.makeText(getApplicationContext(),"Updated num of row is"+response.toString(),Toast.LENGTH_LONG).show();
}
}
你的PHP代码将
if($res){
$resp=mysql_affected_rows();
if($resp==0)
{
$resp="no record found for".$_POST['name'];
}
if($resp==1 or $resp>1)
{
$resp=mysql_affected_rows();
}else $resp="efrror is".mysql_error();
相关问题
- 1. 凌空手柄onErrorResponse
- 2. 凌空onErrorResponse给NullPointerException异常
- 3. 如何调试凌空请求发送
- 4. Android的凌空RxJava - 多请求
- 5. Android凌空自定义请求
- 6. Android Volley请求身份onErrorResponse部分
- 7. 凌空取消请求
- 8. 凌空请求机制
- 9. Android的凌空如何使用凌空
- 10. 凌空第二请求返回空
- 11. Android的凌空缓存
- 12. 凌空onResponse的Android不行
- 13. 凌空JSON请求不给我响应
- 14. 凌空JsonArrayRequest POST请求不工作
- 15. 凌空请求队列返回null
- 16. 凌空用GET请求和参数
- 17. 凌空内存泄漏请求
- 18. Android的凌空SERVERERROR
- 19. 如何编写单元测试用例凌空JSON请求
- 20. 如何与Android凌空
- 21. Android凌空 - 当所有请求完成时得到回调
- 22. 发送请求和响应拿到饼干与Android凌空
- 23. 获得500错误凌空PUT请求的Android
- 24. 发送数据请求(无JSON)凌空android
- 25. 当所有请求完成时,Android凌空获得回调
- 26. Android的凌空字符串请求响应串
- 27. 的Android使用凌空
- 28. android登录凌空错误
- 29. Android的凌空图书馆
- 30. 使用凌空
,你可以执行你得到超时错误后,再次相同的请求,你试过吗? – VinceStyling
我该如何从onResponse执行它?我应该在onResponse中使用VolleyPorvider.addRequest()吗? – user3009752