java - 未经授权时如何使用android volley重新发送请求

标签 java android http android-volley

在我的 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/

相关文章:

java - 列表如何使用 Apache poi 将映射值写入 Excel 文件

performance - 转到HTTP服务器性能问题

php http header

http - python 在 Content-Disposition 中请求 POST Multipart/form-data 和附加参数

android - 以编程方式删除我的应用程序(Android)

c# - 强制从内存中删除对象

java - 在 Android 中单击通知后,如何重新启动而不是重新创建 Activity?

java - 生成的 WSDL 中的空 soapAction

android - child Activity 返回按钮与完成()

android - 如何使用 SMS Intent 关闭默认的短信应用程序以及如何获得发送成功消息的回调。(新政策更改备用)