應設置要求的RetryPolicy:
myRequest.setRetryPolicy(new DefaultRetryPolicy(
MY_SOCKET_TIMEOUT_MS,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
這將更改您的代碼:
RequestQueue mRequestQueue = Volley.newRequestQueue(getApplicationContext());
JsonObjectRequest request = new JsonObjectRequest(Method.GET, cityListUrl, null, new
Listener<JSONObject>() {
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);
如果只是剛開始接觸凌空,你可能想而不是考慮droidQuery,這有點容易配置:
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());
}
}));
有任何onTimeOut方法? –
@ Mr.Hyde我不知道* Volley *中的一個,但是您可以通過使用* statusCode()*來處理* droidQuery *中的* statusCode()*,它接受可返回的狀態代碼數組,並且* Function *所以你可以傳入超時代碼(480,419,504,503,522,598,599)和一個*函數*來處理這些超時。 * varargs *的第一個參數將是一個* AjaxOptions *對象,您可以選擇性地重新啓動您的請求:'$ .ajax(((AjaxOptions)args [0]);' – Phil
我試過相同的...一些它的工作時間....有時它會給timeoutError並很快重試....並再次給出相同的錯誤,... 如何識別和找到實際的原因? ... – Bhuro