Android java.net.UnknownHostException:主机无法parsing
此代码不起作用:
URL url = new URL( xmlPath ); InputSource input = new InputSource( url.openStream() );
所有的时间,导致一个UnknownHostException,即使当主机存在时,如果来自不同的开发主机(机器),也来自浏览器,已经成功使用相同的代码。
我可能不再问这个问题,重复Android java.net.UnknownHostException:主机是未解决(策略问题) 。 论坛软件不允许我评论这个问题的不满意的答案(为了更多地关注我最终find的解决scheme)。 也许我还不够受欢迎,因为这个特权。 同时,我基本上重新发布了这个问题和一个不同的答案。
基本上,我接受也许Android设备在某些情况下与DNS很难,但我已经尝试过,例如anddev.org如何使用SAXparsing器的例子,它在一台机器上工作,我有另外一个。
编辑:如上所述,我知道一个工作的答案,并将其发布。
我是a)提出一个问题(这个问题已经被问及答案没有成功),b)回答这个问题是为了我的回答将会有用的人的利益。
答案非常简单:删除,然后在Eclipse中重新创build您的AVD(虚拟设备/仿真器)。 它为我工作 – 第一次。
我一直按照上面的步骤,但仍然尝试没有运气,最后我只是意识到我的应用程序不允许在模拟器外面的互联网。 所以只需在清单文件中添加用户权限。 完成! 感谢jozsi请参阅http://www.helloandroid.com/tutorials/how-download-fileimage-url-your-device
- android.permission.INTERNET对
- android.permission.ACCESS_NETWORK_STATE
- android.permission.READ_PHONE_STATE
我也在手机上看到过这个(在做USBdebugging的时候)。 解决scheme是禁用WiFi,并重新启用它。
在我的情况下,我正在从手机上的URL下载一个XML文件,但是在这个线程中描述了这个问题。
为了修复它,我不仅需要有定期的互联网许可
<uses-permission android:name="android.permission.INTERNET" />
但我也需要
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
作为一个build议,看看您的设备是否可能需要相同的东西,尝试导航到您的手机的浏览器的URL,看看是否需要SD卡或什么的提示。
希望能帮助别人。
它在AndroidMenifest.xml
文件中为我添加用户对Internet的权限
<uses-permission android:name="android.permission.INTERNET"/>
解决scheme在这里你需要在你的模拟器中启用互联网没有别的。
-
打开模拟器
-
按菜单button并打开“设置”。
-
打开“无线和networking”。
-
打开“移动networking”。
-
检查“数据启用”
完成! 现在,再次testing您的应用程序。
干杯!
在我的情况下,问题在其他地方。 我不得不:
-
添加
<uses-permission android:name="android.permission.INTERNET" />
-
在我的模拟器上设置代理服务器:
Emulator > settings > wireless and network > Mobile Networks > Access Point Name > "the access point you have ;)"
。 在这里你可以设置所有的代理端口的URL和login/通过你想要的。
和
- 在一个单独的线程中调用我的networking操作。 简单的方法是实施一个AsynchTask。
我在这里find了解决scheme:
HTTP在Android模拟器中不起作用
“这个例外是有原因的,networking活动可能需要一段时间,在主线程上执行联网,这是负责更新用户界面的同一线程,会冻结线程直到联网完成(这是每个人线程,但是当它在一个专用的线程上执行时,没关系)。在Android中,如果UI线程在5秒钟内没有激活,它将显示应用程序没有响应,是否要closures它?对话框。
我无法摆脱模拟器“UnknownHostExceptions” – 而模拟器的浏览器也无法获得连接。 尝试了所有的build议,我可以find堆栈溢出和其他地方。
最后,我删除了我的AVD,closures了Eclipse,然后通过命令行创build了AVD。 然后通过命令行使用-dns-server 8.8.8.8启动它。 (在我的Mac上:./emulator -avd Google-8 -dns-server 8.8.8.8)终于奏效了!
希望这可以帮助别人。
非常感谢Russ。 我很高兴你坚持下去。 我花了一个小时的最佳时间阅读各种可能的修复这个错误。 只是对于其他人绊倒这个线程,我会在这里简要回顾一下: – 检查互联网使用权限是在清单 – 修改exception(毫无意义) – 在您的操作系统 – 共享连接上更改防火墙设置(仅限Windows)其他的东西
我的解决办法比你的要多一点,但不多。 看完你的post后,我closures并销毁了所有的模拟器。 然后我注意到,当我对运行button(带有白色箭头的绿色圆圈)进行挖掘时,它说程序已经在运行,即使没有AVD(模拟器)存在! 无论如何,重新开始日食,创build一个AVD和跑它,鲍勃是我父亲的兄弟。 我的代码或设置完全没有关系。
后来我发现了这个。 它可能会实现同样的事情,但我不能担保它,除非问题再次出现。 http://www.jiahaoliuliu.com/2011/02/stopping-android-applications-already.html另一个/可能/实现相同结果的技巧是在运行configuration,目标选项卡中勾选“擦除用户数据”。;
我的问题是当通过WIFI从计算机共享互联网,以太网连接丢失,重新连接后,我无法实现电话连接。 这是通过在计算机上重新启动Internet共享来解决的。
希望它可以帮助别人。
在我的情况下,我使用HttpURLConnection的基于主机名的URL。 但是,使用基于IP的url,解决了问题。 我也删除/重新创build了AVD,但没有帮助。
我刚刚重新启动AVD并添加用户权限,然后它的工作。
<uses-permission android:name="android.permission.INTERNET" />
问题解决了
运行cd C:\ Program Files \ Android \ android-sdk \ tools
在cmd中运行android list avd返回ur availabe avd的列表….在我的情况下是Myabc_avd
运行模拟器@Myabc_avd -dns-server 8.8.8.8 cmd … avd将显示avd去avd的浏览器和typeswww.google.com将显示谷歌页面。 你现在可以使用像myfrstapp.com这样的主机名来访问浏览器
如果一切顺利,那么你可以使用eclipse运行你的项目,但要确保它运行在从cmd运行的avd中。
在我的情况下,我刚刚重新启动模拟器,它的工作。
这很简单 无需重新启动eclipse或删除并创build模拟器,只需要按照下面的步骤进行操作:
- 右键点击你的项目
- 点击“ Run as ”
- 点击“ 运行configuration ”
- 窗口将被打开
- 在左侧面板中select您的项目运行configuration
- 然后在右侧面板中打开“ 目标 ”选项卡
- 向下滚动
- 您将在底部获得一个名为“ 其他模拟器命令行参数 ”的选项
- 在文本框中input“ -dns-server 8.8.8.8 ”这些值( 不带双引号 )。
而已…
我在login到VPN时启动模拟器时遇到了这个问题。 在离开模拟器并重新启动之前,注销VPN不起作用。 很容易testing你的模拟器是不是正确parsing名称 – 只要进入模拟器浏览器并键入一个网站的主机名。