Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Android排名DefaultRetryPolicy无法按预期工作大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
所以,我有这个Volley PUT请求:
private Boolean syncCall(JSONObject jsonObject,final VolleyCallBACk
        callBACk) {

    final ProgressDialog progDailog = new ProgressDialog(context);

    final Boolean[] success = {falsE};

    progDailog.setmessage("...");
    progDailog.seTindeterminate(false);
    progDailog.setProgressStyle(ProgressDialog.STYLE_SPINNER);

    progDailog.setCancelable(false);
    progDailog.show();

    final SharedPreferences prefs = PreferenceManager
            .getDefaultSharedPreferences(context);

    requestQueue queue = Volley.newrequestQueue(context,new HurlStack());

    final String token = prefs.getString("token",null);

    String URL = Constants.getUrlSync();
    String param1 = String.valueOf(prefs.geTint("pmp",1));
    String param2 = String.valueOf(prefs.geTint("ei",1));

    URL = URl.replace("[x]",param1);
    URL = URl.replace("[y]",param2);

    //pegar id pmp e IE corretas
    JsonObjectrequest jsObjrequest = new JsonObjectrequest(request
            .Method.PUT,URL,jsonObject,new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject responsE) {
                    callBACk.onsuccess(response + "");
                    success[0] = true;
                    progDailog.dismiss();
                }
            },new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {

                    callBACk.onFailure(error);
                    tokenFailure(error);
                    success[0] = false;
                    progDailog.dismiss();
                }
            }) {


        @Override
        public Map<String,String> getHeaders() throws
                AuthFailureError {

            HashMap<String,String> headers = new HashMap<>();
            headers.put("Token",token);

            return headers;
        }
    };

    int socketTimeout = 30000;
    RetryPolicy policy = new DefaultRetryPolicy(socketTimeout,DefaultRetryPolicy.DEFAULT_MAX_RETRIES,DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);

    jsObjrequest.setRetryPolicy(policy);


    queue.add(jsObjrequest);

    return success[0];
}

我的问题是我发送了一个非常大的JSON,所以5秒的认超时是不够的.因此,我尝试将超时增加到30秒,并且使用DefaultRetryPolicy来增加重试次数.

问题是,它在5s内保持计时,甚至不会重试一次!

我是否必须有一个监听器或回调重试?我在使用DefaultRetryPolicy做错了什么?请帮忙,这个问题让我疯狂……

解决方法

您需要使用DefaultRetryPolicy吗?

因为你可以定义自己的.

而不是这个:

RetryPolicy policy = new DefaultRetryPolicy(socketTimeout,DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);

试试这个:

jsObjrequest.setRetryPolicy(new RetryPolicy() {
    @Override
        public int getCurrentTimeout() { 
            // Here goes the new timeout
            return mySeconds; 
        }
        @Override
        public int getCurrentRetryCount() { 
            // The max number of attempts
            return myAttempts; 
        }
        @Override
        public void retry(VolleyError error) throws VolleyError {
            // Here you @L_801_8@ check if the retry count has gotten
            // To the max number,and if so,send a VolleyError msg
            // or something    
        }
    });

大佬总结

以上是大佬教程为你收集整理的Android排名DefaultRetryPolicy无法按预期工作全部内容,希望文章能够帮你解决Android排名DefaultRetryPolicy无法按预期工作所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。