Java Android UnknownHostException Facebook SDK

Java Android UnknownHostException Facebook SDK,java,android,http,ip,android-networking,Java,Android,Http,Ip,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) 0

情况是这样的。我的应用运行良好,能够与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)

java.net.UnknownHostException
通常意味着无法解析主机的IP地址,尽管实际原因可能因情况而异。如果代码实现正确(无论您使用哪种API、HttpUrlConnection或DefaultHttpClient),并且仍然是间歇性的,则很可能是旧Android系统中与DNS缓存和TTL管理相关的错误:

自Android 4.1以来,此问题已得到修复,请参阅中的附加说明:

DNS缓存

在Android 4.0(冰激凌三明治)和更早版本中,DNS缓存由InetAddress和C库执行,这意味着DNS TTL无法正确执行。在以后的版本中,缓存仅由C库完成,DNS TTL也得到了认可

对于旧的Android版本,Android建议调整Java级别的DNS属性
networkaddress.cache.ttl
networkaddress.cache.negative.ttl
,请参阅:

/**
* ... ...
*
*DNS缓存
*在Android上,默认情况下,地址会被缓存600秒(10分钟)。失败的查找是错误的
*缓存10秒。底层C库或操作系统的缓存时间可能更长,但您可以控制
*使用通常的{@code“networkaddress.cache.ttl”}和
*{@code“networkaddress.cache.negative.ttl”}系统属性。它们被解析为整数
*秒数,其中特殊值0表示“不缓存”,而-1表示“永远缓存”。
*
* ... ...
*/
相关讨论:


尝试调整这两个属性,看看这是否有什么不同,如果你的目标是旧的Android版本。

我没有任何关于网络连接、DNS缓存和TTL管理的核心概念知识

但同样的问题也发生在我身上,当时我只是在Facebook项目的[Facebook SDK的源项目]中做了一些更改,然后将其用于我的项目。这两个变化只是来自不同的答案

在函数中openUrl(字符串url、字符串方法、捆绑参数)

更换这条线

 HttpURLConnection conn =
            (HttpURLConnection) new URL(url).openConnection();
有了这些台词,

        try {
            InetAddress i = InetAddress.getByName(url);
        } catch (UnknownHostException e1) {
            e1.printStackTrace();
        }

        HttpURLConnection conn = (HttpURLConnection) new URL(url)
                .openConnection();
        conn.setConnectTimeout(50000);

我的问题也减少了。

如果您可以发布代码,这会有所帮助……但是,根据我的经验,调用httpClient.getConnectionManager().shutdown();已解决此问题。

您找到解决方案了吗?这发生在我身上,但在我的情况下,这不是Facebook,而是我自己的服务器,我使用的是
DefaultHttpClient
。可能是你的互联网连接很慢。@IlyaKogan,没有一些代码片段和异常堆栈跟踪,我们除了猜测之外帮不了什么忙。可能重复:?@yorkw,我的代码与THelper链接到的代码非常相似:。我使用与Rob相同的对象,但是使用HttpGet而不是HttpPost.Log.wtf(标记“问题仍然存在”);
 HttpURLConnection conn =
            (HttpURLConnection) new URL(url).openConnection();
        try {
            InetAddress i = InetAddress.getByName(url);
        } catch (UnknownHostException e1) {
            e1.printStackTrace();
        }

        HttpURLConnection conn = (HttpURLConnection) new URL(url)
                .openConnection();
        conn.setConnectTimeout(50000);