5

我的应用程序中有一个非常大的错误,我似乎真的无法解决。每当我通过以下代码拨打休息电话时:

  HttpGet request = new HttpGet(url + getParams());

  HttpParams httpParameters = new BasicHttpParams();
  HttpConnectionParams.setConnectionTimeout(httpParameters, 5000);
  HttpConnectionParams.setSoTimeout(httpParameters, 10000);

  DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);

  httpClient.execute(request);

我在 DDMS 中得到错误:

07-15 11:22:47.448: WARN/System.err(973): org.apache.http.conn.ConnectTimeoutException: Connect to (some ip-address) timed out

但有时代码运行完美,我收到了我应该收到的数据。我还通过计算机上的普通网络浏览器测试了其余服务器调用,它总是在 100 毫秒内返回我的数据。那么我做错了什么?我还在另一台设备上对其进行了测试,但这给了我同样的问题。如果有人能解决我的问题,我会很高兴:)

4

4 回答 4

5

问题是DefaultHttpClient. 你是异步使用的吗?由于DefaultHttpClient不是线程安全的,因此在异步环境中使用它可能会导致问题。在我的活动同时启动多个 Http 连接并且我最终将其更改为使用HttpURLConnection. 你可以参考这个网站:http ://www.vogella.de/articles/AndroidNetworking/article.html

于 2012-01-13T01:35:27.437 回答
1

我有同样的问题。

尝试对您的请求使用直接 IP。我注意到 Android DNS 查找有时表现得很奇怪。我搜索并找到了这个: http: //mailinglists.945824.n3.nabble.com/Android-and-reverse-DNS-lookup-issues-td3011461.html

不知道是否相关,我仍在尝试寻找解决方法。也许这里有人可以看看并弄清楚。

于 2011-08-05T08:57:50.173 回答
0

检查您是否能够使用您的开发机器进行连接,同时检查加载时间。您的超时很有可能太小了。

于 2011-07-15T10:12:11.343 回答
0

有类似的问题,只能在尝试同时使用多个设备连接时重现,解决方案是:

实例重启解决了连接问题。(或者只需要重启网络服务)

(c) 我的服务器/实例管理员

此外,有些人遇到了类似的问题,并且其他一些解决方案对他们有用,例如:

  1. 禁用 tcp_timestamp
  2. 禁用 tcp_tw_reuse & tcp_tw_recycle
  3. 在 Android 清单中启用 vm 保存模式:android:vmSafeMode="true"

于 2015-10-29T08:17:06.793 回答