Volley RequestQueue Timeout

匿名 (未验证) 提交于 2019-12-03 01:55:01

问题:

RequestQueue mRequestQueue = Volley.newRequestQueue(getApplicationContext()); mRequestQueue.add(new JsonObjectRequest(Method.GET, cityListUrl, null, new Listener()  {     public void onResponse(JSONObject jsonResults)      {         //Any Call     } }, new ErrorListener()    {         public void onErrorResponse(VolleyError arg0)          {             //Any Error log         }    } )); 

This is my Request Call and i want to change or set timeout for the request . Is it possible anyway ??

回答1:

You should set the request's RetryPolicy:

myRequest.setRetryPolicy(new DefaultRetryPolicy(                 MY_SOCKET_TIMEOUT_MS,                  DefaultRetryPolicy.DEFAULT_MAX_RETRIES,                  DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 

This would change your code to:

RequestQueue mRequestQueue = Volley.newRequestQueue(getApplicationContext()); JsonObjectRequest request = new JsonObjectRequest(Method.GET, cityListUrl, null, new     Listener() {         public void onResponse(JSONObject jsonResults) {             //Any Call         }     }, new ErrorListener(){         public void onErrorResponse(VolleyError arg0) {             //Any Error log         }     } );   int socketTimeout = 30000;//30 seconds - change to what you want RetryPolicy policy = new DefaultRetryPolicy(socketTimeout, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT); request.setRetryPolicy(policy); mRequestQueue.add(request); 

If you are only just getting started with Volley, you might want to instead consider droidQuery, which is a little easier to configure:

int socketTimeout = 30000; $.ajax(new AjaxOptions().url(cityListUrl)                         .timeout(socketTimeout)                         .success(new Function() {                             public void invoke($ d, Object... args) {                                 JSONObject jsonResults = (JSONObject) args[0];                                 //Any call                             }                         })                         .error(new Function() {                             public void invoke($ d, Object... args) {                                 AjaxError error = (AjaxError) args[0];                                 Log.e("Ajax", error.toString());                             }                         })); 


回答2:

Something like this

RetryPolicy retryPolicy = new DefaultRetryPolicy(     YOUR_TIMEOUT_MS,     YOUT_MAX_RETRIES,     YOUR_BACKOFF_MULT );  JsonObjectRequest request = new JsonObjectRequest(...); request.setRetryPolicy(retryPolicy); 

Or you could implement your own RetryPolicy.



回答3:

This is worked for me :

RequestQueue mRequestQueue = Volley.newRequestQueue(getApplicationContext()); JsonObjectRequest request = new JsonObjectRequest(Method.GET, cityListUrl, null, new     Listener() {         public void onResponse(JSONObject jsonResults) {             //Any Call         }     }, new ErrorListener(){         public void onErrorResponse(VolleyError arg0) {             //Any Error log         }     } );   int socketTimeout = 30000;//30 seconds - change to what you want RetryPolicy policy = new DefaultRetryPolicy(socketTimeout, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT); request.setRetryPolicy(policy); mRequestQueue.add(request); 


回答4:

void RequestVolley() {      // Instantiate the RequestQuee     RequestQueue queue = Volley.newRequestQueue(getApplication());      //create new volley request     JsonObjectRequest requestNew = new JsonObjectRequest(Request.Method.GET, Url, null, createMyReqSuccessListener(), createMyReqErrorListener());      //Response.Listener and Error.Listener defined afterwards       //first param is TIMEOUT ...integer     //second param is number of retries ...integer     //third is backoff multiplier ...integer      requestNew.setRetryPolicy(new DefaultRetryPolicy(6000, 1, 1));      queue.add(requestNew); }  private Response.Listener  createMyReqSuccessListener() {     return new Response.Listener  () {         @Override         public void onResponse(JSONObject response) {              //do something         }     }; }  private Response.ErrorListener createMyReqErrorListener() {     return new Response.ErrorListener() {         @Override         public void onErrorResponse(VolleyError error) {              //do something         }     }; } 


回答5:

String url = "https://api.joind.in/v2.1/events?start=" + start + "&resultsperpage=20&format=json"; Log.i("DREG", "onLoadMoreItems: " + url); final StringRequest stringRequest = new StringRequest(Request.Method.GET, url,         new Response.Listener() {             @Override             public void onResponse(String response) {                 // Add Code Here             }         },         new Response.ErrorListener() {             @Override             public void onErrorResponse(VolleyError error) {                     if (error instanceof NetworkError) {                     } else if (error instanceof ServerError) {                     } else if (error instanceof AuthFailureError) {                     } else if (error instanceof ParseError) {                     } else if (error instanceof NoConnectionError) {                     } else if (error instanceof TimeoutError) {                         Toast.makeText(getContext(),                                 "Oops. Timeout error!",                                 Toast.LENGTH_LONG).show();                     }             }         } ); stringRequest.setRetryPolicy(new DefaultRetryPolicy(         10000,         DefaultRetryPolicy.DEFAULT_MAX_RETRIES,         DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); requestQueue.add(stringRequest); 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!