可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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);