此代码不起作用:
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)回答这个问题是为了那些对我有帮助的人的利益。
答案 0 :(得分:69)
答案非常简单:删除,然后在Eclipse中重新创建AVD(虚拟设备/模拟器)。它对我有用 - 第一次。
答案 1 :(得分:54)
我一直按照上面的步骤,但仍然没有运气,最后我才意识到我的应用程序不允许在模拟器中外出互联网。因此,只需在清单文件中添加用户权限即可。完成!感谢jozsi,请参阅http://www.helloandroid.com/tutorials/how-download-fileimage-url-your-device
答案 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
文件
<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和登录/传递。
和强>
我在这里找到了解决方案:
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或删除并创建模拟器,您只需按照以下步骤操作:
那是......
答案 15 :(得分:0)
我在登录VPN时启动模拟器时遇到此问题。在退出模拟器并重新启动之前,注销VPN无效。如果你的模拟器没有正确解析名称,那么很容易测试 - 只需转到模拟器浏览器并输入网站主机名。
答案 16 :(得分:0)
请尝试重新启动模拟器。