Android java.net.UnknownHostException:主机未解析

时间:2010-08-18 16:36:57

标签: android

此代码不起作用:

URL         url   = new URL( xmlPath );
InputSource input = new InputSource( url.openStream() );

始终导致UnknownHostException,即使主机存在,也使用相同的代码成功命中,如果来自不同的开发主机(机器),也来自浏览器。

我可能会再次问这个问题,重复Android java.net.UnknownHostException: Host is unresolved (strategy question)。论坛软件不允许我对该问题的不满意答案发表评论(为了更多地关注我最终找到的解决方案)。也许我还不够受欢迎而没有得到这种特权。与此同时,我基本上重新发布了问题和不同的答案。

基本上,我接受在某些情况下Android设备可能很难用DNS,但我已经尝试过,例如anddev.org如何使用SAX解析器的例子,它在一台机器上工作我有而不是另一个。

编辑: 如上所述,我知道一个有效的答案并将发布。

我是a)提出一个问题(已经被问到并且没有成功回答)和b)回答这个问题是为了那些对我有帮助的人的利益。

17 个答案:

答案 0 :(得分:69)

答案非常简单:删除,然后在Eclipse中重新创建AVD(虚拟设备/模拟器)。它对我有用 - 第一次。

答案 1 :(得分:54)

我一直按照上面的步骤,但仍然没有运气,最后我才意识到我的应用程序不允许在模拟器中外出互联网。因此,只需在清单文件中添加用户权限即可。完成!感谢jozsi,请参阅http://www.helloandroid.com/tutorials/how-download-fileimage-url-your-device

  1. android.permission.INTERNET对
  2. android.permission.ACCESS_NETWORK_STATE
  3. android.permission.READ_PHONE_STATE

答案 2 :(得分:14)

在我的情况下,我从手机上的URL下载了一个XML文件,但是在这个帖子中描述了这个问题。

为了修复它,我不仅需要获得常规的互联网许可

<uses-permission android:name="android.permission.INTERNET" /> 

但我也需要

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

建议您查看您的设备是否需要相同的内容,尝试导航到手机浏览器中的网址,看看是否有关于需要SD卡的提示。

希望能帮助他人。

答案 3 :(得分:13)

我也在手机上看过这个(在进行USB调试时)。解决方案是禁用WiFi,然后重新启用它。

答案 4 :(得分:8)

通过在AndroidMenifest.xml文件

中添加用户对Internet的权限,它对我有用
<uses-permission android:name="android.permission.INTERNET"/>

答案 5 :(得分:6)

您需要在模拟器中启用互联网。

  • 打开模拟器

  • 按菜单按钮并打开“设置”

  • 打开“无线和网络”

  • 打开“移动网络”

  • 选中“数据启用”

现在再次测试您的应用程序。

答案 6 :(得分:6)

就我而言,问题出在其他地方。我必须:

  • 添加<uses-permission android:name="android.permission.INTERNET" />

  • 在我的模拟器上设置代理服务器:Emulator > settings > wireless and network > Mobile Networks > Access Point Name > "the access point you have ;)"。在这里,您可以设置所需的所有代理端口URL和登录/传递。

  • 在单独的线程中调用我的网络操作。简单的方法是实现AsynchTask。

我在这里找到了解决方案:

HTTP doesn't work in Android emulator

  

“这个例外是有原因的。网络活动可能需要时间,   在主线程上执行网络连接,这是同一个线程   负责更新UI的人会冻结线程直到   网络已经完成(这是在每个线程上发生的事情,但是什么时候   它是在专用线程上执行的,没关系)。在Android中,如果   UI线程在5秒内未激活,它将显示Application is   没有回应,你想关闭吗?对话。 “

答案 7 :(得分:5)

我无法摆脱模拟器“UnknownHostExceptions” - 模拟器的浏览器也无法获得连接。尝试了我可以在堆栈溢出和其他任何地方找到的所有建议。

最后我删除了我的AVD,关闭了Eclipse,然后通过命令行创建了AVD。然后通过命令行使用-dns-server 8.8.8.8启动它。 (在我的Mac上:./ emulator -avd Google-8 -dns-server 8.8.8.8)它终于奏效了!

希望这有助于其他人。

答案 8 :(得分:3)

我的问题是当通过WIFI从计算机共享互联网时,在以太网连接丢失并重新连接后,我无法在手机上实现连接。这是通过在计算机上重新启动互联网共享来解决的。

希望它有所帮助。

答案 9 :(得分:3)

非常感谢Russ。我很高兴你坚持下去。我花了大约一小时的时间阅读各种可能的修复错误。对于任何绊倒这个主题的人来说,我将简要回顾一下: -Check Internet使用权限在清单中 - 解决异常(无意义) - 在您的操作系统上更改防火墙设置 - 分享连接(仅限Windows) 还有其他一些东西

我的修复比你的多了一点,但并不多。 阅读完帖子后,我关闭并销毁了所有模拟器。然后我注意到,当我在运行按钮(带有白色箭头的绿色圆圈)上移动时,它表示程序已经运行,即使没有AVD(模拟器)存在!无论如何,重启eclipse,创建一个AVD并运行它,Bob是我父亲的兄弟。与我的代码或设置完全无关。

之后我发现了这个。它可能会实现同样的目的,但我不能保证它,除非问题再次发生。 http://www.jiahaoliuliu.com/2011/02/stopping-android-applications-already.html /可能/实现相同结果的另一个技巧是在“运行配置,目标”选项卡中勾选“擦除用户数据”。

答案 10 :(得分:2)

在我的情况下,我使用基于主机名的URL和HttpURLConnection。但是,使用基于IP的URL解决了该问题。我也删除/重新创建了AVD,但这没有帮助。

答案 11 :(得分:2)

我只是重新启动AVD并添加用户权限然后就可以了。

<uses-permission android:name="android.permission.INTERNET" />

答案 12 :(得分:2)

问题已解决

运行cd C:\ Program Files \ Android \ android-sdk \ tools

在cmd中运行android list avd返回ur available avd ....的列表在我的情况下它的Myabc_avd

在cmd中运行模拟器@Myabc_avd -dns-server 8.8.8.8 ... avd将显示avd 转到avd的浏览器并输入www.google.com将显示谷歌页面。 您现在可以使用myfrstapp.com等主机名访问浏览器

如果一切顺利,那么你可以使用eclipse运行你的项目,但要确保它在从cmd运行的avd中运行。

答案 13 :(得分:0)

在我的情况下,我刚刚重新启动了模拟器,它工作正常。

答案 14 :(得分:0)

这很简单。无需重新启动eclipse或删除并创建模拟器,您只需按照以下步骤操作:

  1. 右键单击您的项目
  2. 点击&#34; 运行&#34;
  3. 点击&#34; 运行配置&#34;
  4. 窗口将被打开
  5. 在左侧面板中选择项目运行配置
  6. 然后在右侧面板中打开&#34; 目标&#34;标签
  7. 向下滚动
  8. 您将在底部获得一个名为&#34; 其他模拟器命令行参数&#34;
  9. 的选项
  10. Put&#34; -dns-server 8.8.8.8 &#34;这些值(没有双引号)在文本框中。
  11. 那是......

答案 15 :(得分:0)

我在登录VPN时启动模拟器时遇到此问题。在退出模拟器并重新启动之前,注销VPN无效。如果你的模拟器没有正确解析名称,那么很容易测试 - 只需转到模拟器浏览器并输入网站主机名。

答案 16 :(得分:0)

请尝试重新启动模拟器。