首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >VolleyError: java.lang.IllegalArgumentException:超时值<0

VolleyError: java.lang.IllegalArgumentException:超时值<0
EN

Stack Overflow用户
提问于 2016-06-10 08:13:16
回答 2查看 3.6K关注 0票数 4

我正在使用Jobqueue库,使用同步请求和Volley。一切都很好,但经过很长一段时间或在未确定的时间之后执行了大量请求,我得到了以下错误:

代码语言:javascript
运行
复制
 Caused by: com.android.volley.VolleyError: java.lang.IllegalArgumentException: timeout < 0
      at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:141)
 Caused by: java.lang.IllegalArgumentException: timeout < 0
      at java.net.Socket.setSoTimeout(Socket.java:521)
      at com.android.okhttp.internal.http.HttpTransport.discardStream(HttpTransport.java:193)
      at com.android.okhttp.internal.http.HttpTransport.makeReusable(HttpTransport.java:170)
      at com.android.okhttp.internal.http.HttpEngine.release(HttpEngine.java:445)
      at com.android.okhttp.internal.http.AbstractHttpInputStream.endOfInput(AbstractHttpInputStream.java:86)
      at com.android.okhttp.internal.http.HttpTransport$FixedLengthInputStream.read(HttpTransport.java:394)
      at java.io.InputStream.read(InputStream.java:162)
      at com.android.volley.toolbox.BasicNetwork.entityToBytes(BasicNetwork.java:238)
      at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:123)
      at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:112)

这个bug非常奇怪,因为一旦我得到这个错误,请求就不再工作了。我尝试过很多事情,比如每个作业都有一个RequestQueue,而不是一个应用实例RequestQueue,取消所有的作业,重置RequestQueue中的作业和请求。

这是我如何在Volley中使用同步请求的一个例子:

代码语言:javascript
运行
复制
 public class FetchBlacklistJob extends Job {

     public static final String TAG = FetchBlacklistJob.class.getCanonicalName();

     public FetchBlacklistJob(String groupId) {
         super(new Params(Constants.JOB_PRIORITY.HIGH.getValue())
                 .addTags(TAG)
                 .setGroupId(groupId)
                 .singleInstanceBy(TAG)
                 .requireNetwork());
     }

     @Override
     public void onAdded() {

     }

     @Override
     public void onRun() throws Throwable {

         RequestFuture<Blacklist> syncCallback = RequestFuture.newFuture();
         GetBlacklistRequest request = new GetBlacklistRequest(currentBlacklist,
                 syncCallback, syncCallback);
         syncCallback.setRequest(VolleyManager.getInstance().addRequest(request));

         Blacklist response = syncCallback.get(VolleyManager.TIMEOUT, TimeUnit.MILLISECONDS);

         if (response == null || response.getBlacklist() == null) {
             Log.d(TAG, "response null, skipping...");
             return;
         }

         DBUtils.saveBlacklist(response);
     }

     @Override
     protected void onCancel(int cancelReason, @Nullable Throwable throwable) {

     }

我忘了评论,我有一个超时的每一个请求15秒和最大重试次数在截击是0。

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-19 09:14:21

最后,我修正了这个错误,因为Google库缓存请求,所以用Retrofit代替Volley,总是在同一个线程(主线程)中返回,并且某些东西似乎被同步请求阻塞了。

在这篇文章中有一个更好的解释:https://solidgeargroup.com/android-priority-job-queue-background-tasks

票数 2
EN

Stack Overflow用户

发布于 2019-03-20 08:19:23

这可能是通过将相同的DefaultRetryPolicy传递给多个请求造成的。

Volley跟踪DefaultRetryPolicy中的尝试次数和当前超时( current timeout,DefaultRetryPolicy)。如果有多个请求,mCurrentTimeoutMs将呈指数递增,并会溢出为负。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37743206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档