Jam*_*zio 5 java ip android http android-networking
情况就是这样.我的应用程序运行正常,并能够与URL建立连接.但是,在离开应用程序运行几个小时之后,Facebook请求突然发出以下错误.
09-26 10:01:25.175: W/System.err(252): java.net.UnknownHostException: Host is unresolved: xyz.com:80
09-26 10:01:25.175: W/System.err(252): at java.net.Socket.connect(Socket.java:1037)
09-26 10:01:25.175: W/System.err(252): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>(HttpConnection.java:62)
09-26 10:01:25.175: W/System.err(252): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnectionManager$ConnectionPool.getHttpConnection(HttpConnectionManager.java:145)
09-26 10:01:25.175: W/System.err(252): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnectionManager.getConnection(HttpConnectionManager.java:67)
09-26 10:01:25.175: W/System.err(252): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnection.getHTTPConnection(HttpURLConnection.java:821)
09-26 10:01:25.175: W/System.err(252): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:807)
09-26 10:01:25.175: W/System.err(252): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1051)
09-26 10:01:25.175: W/System.err(252): at java.net.URL.openStream(URL.java:653)
Run Code Online (Sandbox Code Playgroud)
应用程序和模拟器上都会发生此错误.当我退出我的应用程序并重新连接到Facebook时,连接再次起作用.
我应该注意:当我与自己的服务器建立连接时,不会出现问题.
此错误是由以下行引起的......
mAsyncFacebookRunner.request("fql", paramaters,
new FQLRequestListener());
Run Code Online (Sandbox Code Playgroud)
java.net.UnknownHostException通常意味着主机的 IP 地址无法解析,但实际原因可能因情况而异。如果代码实现正确(无论你使用哪个 API,HttpUrlConnection 还是 DefaultHttpClient)并且它仍然间歇性地发生,则很可能是旧 Android 系统中与 DNS 缓存和 TTL 管理相关的错误:
问题 7904:Android 不支持 TTL 并缓存 DNS 结果 10 分钟
从 Android 4.1 开始,此问题已得到修复,请参阅InetAddress API 文档中的额外说明:
DNS缓存
在 Android 4.0 (Ice Cream Sandwich) 及更早版本中,DNS 缓存由 InetAddress 和 C 库执行,这意味着无法正确遵守 DNS TTL。在以后的版本中,缓存仅由 C 库完成,并且遵守 DNS TTL。
对于旧的 Android 版本,Android 建议调整 Java 级别的 DNS 属性networkaddress.cache.ttl,请参阅旧源代码networkaddress.cache.negative.ttl中的 JavaDoc :
/**
* ... ...
*
* <h4>DNS caching</h4>
* <p>On Android, addresses are cached for 600 seconds (10 minutes) by default. Failed lookups are
* cached for 10 seconds. The underlying C library or OS may cache for longer, but you can control
* the Java-level caching with the usual {@code "networkaddress.cache.ttl"} and
* {@code "networkaddress.cache.negative.ttl"} system properties. These are parsed as integer
* numbers of seconds, where the special value 0 means "don't cache" and -1 means "cache forever".
*
* ... ...
*/
Run Code Online (Sandbox Code Playgroud)
相关讨论:
如果您的目标是旧的 Android 版本,请尝试调整这两个属性,看看是否有任何区别。
| 归档时间: |
|
| 查看次数: |
1241 次 |
| 最近记录: |