在我的Android应用程序中,我必须使用android volley做一些http请求。如果我的请求成功,那么当我收到错误并且此错误包含状态代码401 时会出现问题。在这种情况下,我想做一些东西,并重复相同的请求,相同的网址和相同的参数。有官方的方法吗?如果没有,我怎样才能从错误中获取我的参数?
StringRequest req = new StringRequest(method, URL,
new Response.Listener<String>() {
@Override
public void onResponse(String response){
//VolleyLog.v("Response:%n %s", response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
NetworkResponse response = error.networkResponse;
if(response.statusCode == 401){
//make some stuff...
//here i want to resend my request
}
}
}) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
//get headers
}
@Override
public Map<String, String> getParams() throws AuthFailureError {
//get params
}
};
// add the request object to the queue to be executed
ApplicationController.getInstance().addToRequestQueue(req);
任何帮助都将不胜感激。
答案 0 :(得分:1)
您可以创建RetryPolicy来更改默认重试行为,只指定timeout milliseconds,重试计数参数:
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();
}
}
}));
}
希望这会对你有所帮助
答案 1 :(得分:-1)
修改请求后,在requestQueue中添加请求。 在ErrorListener中执行此操作。