java - Volley 请求队列超时

标签 java android android-volley connection-timeout

RequestQueue mRequestQueue = Volley.newRequestQueue(getApplicationContext());
mRequestQueue.add(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
        }
   }
));

这是我的请求调用,我想更改或设置请求的超时。到底有没有可能??

最佳答案

您应该设置请求的 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);

如果您才刚刚开始Volley,您可能需要考虑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());
                            }
                        }));

关于java - Volley 请求队列超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21277123/

相关文章:

java - Guice -如何在扩展抽象模块的类中注入(inject)依赖项 - Java

java - 将十六进制编码/解码为 utf-8 字符串

java - 解析/保存/缓存多个文件时减少 Java 内存使用

android - 如何在主线程中将 ListView、ArrayList、ArrayAdapter 和 notifyDataSetChanged 与可运行对象和消息处理程序一起使用

android - 将数组数据作为参数传递

android - 是否有任何公共(public) API 来测试 Volley API?

java - 从 Controller 类填充回收适配器

java - 我如何找到两个地点之间旅行的距离和时间?

android - 使用 KSoap 从 Android 连接到 Web 服务

android - 使用来自外部源的 apk 包更新 android 应用程序