首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android中Loopj超时异常

Android中Loopj超时异常
EN

Stack Overflow用户
提问于 2014-04-16 13:34:04
回答 3查看 2.4K关注 0票数 1

我有一个奇怪的问题与Loopj异步HTTP库。我有时会使用get或POST获得响应,有时会在很长一段时间后收到响应,有时根本不会收到响应。只有在使用wifi时才会发生这种情况。我在很多项目中都使用过loopj,这些项目可以很好地使用wifi,但这个项目就不行了。当我使用我的移动数据3G连接时,总是收到响应。我已经覆盖了onFaliure方法,这是当服务器没有响应时我得到的结果:

代码语言:javascript
复制
E/statusCode(31980): 0
E/headers(31980): null
E/Throwable(31980): org.apache.http.conn.ConnectTimeoutException: Connect to .. timed out
E/errorResponse(31980): null

在logcat上也会打印一个异常:

代码语言:javascript
复制
04-16 10:58:18.795: W/System.err(31980): org.apache.http.conn.ConnectTimeoutException: Connect to .. timed out
04-16 10:58:18.795: W/System.err(31980):    at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:121)
04-16 10:58:18.795: W/System.err(31980):    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144)
04-16 10:58:18.795: W/System.err(31980):    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
04-16 10:58:18.795: W/System.err(31980):    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
04-16 10:58:18.795: W/System.err(31980):    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
04-16 10:58:18.795: W/System.err(31980):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:670)
04-16 10:58:18.800: W/System.err(31980):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:509)
04-16 10:58:18.800: W/System.err(31980):    at com.loopj.android.http.AsyncHttpRequest.makeRequest(AsyncHttpRequest.java:74)
04-16 10:58:18.800: W/System.err(31980):    at com.loopj.android.http.AsyncHttpRequest.makeRequestWithRetries(AsyncHttpRequest.java:91)
04-16 10:58:18.800: W/System.err(31980):    at com.loopj.android.http.AsyncHttpRequest.run(AsyncHttpRequest.java:54)
04-16 10:58:18.800: W/System.err(31980):    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:390)
04-16 10:58:18.800: W/System.err(31980):    at java.util.concurrent.FutureTask.run(FutureTask.java:234)
04-16 10:58:18.800: W/System.err(31980):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
04-16 10:58:18.800: W/System.err(31980):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
04-16 10:58:18.800: W/System.err(31980):    at java.lang.Thread.run(Thread.java:841)
04-16 10:58:18.800: V/JsonHttpResponseHandler(31980): response body is null, calling onFailure(Throwable, JSONObject)

如果能给出一些解决方案,我将不胜感激。

EN

回答 3

Stack Overflow用户

发布于 2017-04-28 07:16:51

试试这个:

代码语言:javascript
复制
AsyncHttpClient client = new AsyncHttpClient();
client.setTimeout(60000);

这将设置请求超时,然后您将获得所需的时间。

票数 2
EN

Stack Overflow用户

发布于 2014-04-18 01:23:30

这个bug是在1.4.4版本中引入的;

尝试使用这个库:https://github.com/leonardoxh/AsyncOkHttpClient

这个库使用OkHttp (来自Square Inc.)而不是Apache Http客户端,也是2.0Loopj库的代码

;)

票数 1
EN

Stack Overflow用户

发布于 2015-08-27 01:39:32

一年多之后,这个错误时不时地出现。非常有趣的是,尽管堆栈跟踪显示

Throwable“响应正文为空,正在调用onFailure(

,JSONObject)”

被调用的实际方法是onFailure(statusCode, headers, throwable, (JSONObject) null);

根据第231行JsonHttpResponseHandler.java,这表明具有以下签名的方法是要覆盖的方法:

代码语言:javascript
复制
public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23100803

复制
相关文章

相似问题

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