在我的 android 应用程序中,我必须使用 android volley 做一些 http 请求。如果我的请求成功,一切正常,当我收到错误并且此错误有状态代码 401 时,问题就出现了。在这种情况下,我想做一些东西并重复相同的请求、相同的 url 和相同的参数。有官方的方法吗?如果没有,我怎样才能从错误中获取我的参数?
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);
如有任何帮助,我们将不胜感激。
最佳答案
您可以创建 RetryPolicy要更改默认重试行为,仅指定超时毫秒数,重试计数参数:
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();
}
}
}));
}
希望对你有帮助
关于java - 未经授权时如何使用android volley重新发送请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31086386/