Android java.net.UnknownHostException:主机未解析
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android java.net.UnknownHostException:主机未解析相关的知识,希望对你有一定的参考价值。
此代码不起作用:
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)为了那些对我有帮助的人的利益而回答它。
答案非常简单:删除,然后在Eclipse中重新创建AVD(虚拟设备/模拟器)。它对我有用 - 第一次。
我的问题是当通过WIFI从计算机共享互联网时,以太网连接丢失并重新连接后我无法在手机上实现连接。通过重新启动计算机上的Internet共享来解决此问题。
希望它可以帮助某人。
在我的情况下,我使用基于主机名的URL和HttpURLConnection。但是,使用基于IP的URL解决了该问题。我也删除/重新创建了AVD,但这没有帮助。
我只是重新启动AVD并添加用户权限然后它的工作原理。
<uses-permission android:name="android.permission.INTERNET" />
问题解决了
运行cd C:\ Program Files \ Android \ android-sdk \ tools
在cmd中运行android list avd返回你可用avd的列表....在我的情况下它是Myabc Avd
运行模拟器@Myabc_avd -dns-server 8.8.8.8 in cmd ... avd将显示avd go到avd的浏览器并输入www.google.com将显示google页面。您现在可以使用myfrstapp.com等主机名访问浏览器
如果一切顺利,那么你可以使用eclipse运行你的项目,但要确保它在从cmd运行的avd中运行。
在我的情况下,我刚刚重新启动模拟器,它工作。
这很简单。无需重新启动eclipse或删除并创建模拟器,您只需按照以下步骤操作:
- 右键单击您的项目
- 点击“运行方式”
- 点击“运行配置”
- 窗口将被打开
- 在左侧面板中选择项目运行配置
- 然后在右侧面板中打开“目标”选项卡
- 向下滚动
- 您将在底部获得一个名为“Additional Emulator Command Line Arguments”的选项
- 在文本框中输入“-dns-server 8.8.8.8”这些值(不带双引号)。
而已...
我在登录VPN时启动模拟器时遇到此问题。在退出模拟器并重新启动之前,注销VPN无效。如果你的模拟器没有正确解析名称,那么很容易测试 - 只需转到模拟器浏览器并输入网站主机名即可。
请尝试重新启动模拟器。
我一直按照上面的步骤,但仍然没有运气,最后我只是意识到我的应用程序不允许在模拟器中外出互联网。因此,只需在清单文件中添加用户权限即可。完成!感谢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
在我的情况下,我从手机上的URL下载了一个XML文件,但是在这个帖子中描述了这个问题。
为了修复它,我不仅需要获得常规的互联网许可
<uses-permission android:name="android.permission.INTERNET" />
但我也需要
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
建议您查看您的设备是否需要相同的内容,尝试导航到手机浏览器中的URL,看看是否有关于需要SD卡的提示。
希望能帮助别人。
我也在手机上看过这个(在进行USB调试时)。解决方案是禁用WiFi,然后重新启用它。
它通过在AndroidMenifest.xml
文件中添加用户对Internet的权限来为我工作
<uses-permission android:name="android.permission.INTERNET"/>
就我而言,问题出在其他地方。我不得不:
- 添加
<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秒,它将显示应用程序没有响应,是否要关闭它?对话框。“
您需要在模拟器中启用Internet。
- 打开模拟器
- 按菜单按钮并打开“设置”
- 打开“无线和网络”
- 打开“移动网络”
- 检查“数据启用”
现在再次测试您的应用程序
我无法摆脱模拟器“UnknownHostExceptions” - 模拟器的浏览器也无法获得连接。尝试了我可以在堆栈溢出和其他任何地方找到的所有建议。
最后我删除了我的AVD,关闭了Eclipse,然后通过命令行创建了AVD。然后通过命令行使用-dns-server 8.8.8.8启动它。 (在我的Mac上:./ emulator -avd Google-8 -dns-server 8.8.8.8)它终于奏效了!
希望这有助于其他人。
非常感谢Russ。我很高兴你坚持下去。我花了一个小时的时间阅读各种可能的修复程序来解决这个错误。只是对于其他绊倒这个线程的人,我将简要回顾一下:-Check Internet使用权限在清单中 - 解决异常(无意义) - 在您的OS -Share连接上更改防火墙设置(仅限Windows)并加载其他的东西
我的修复比你的多一点,但不多。阅读完帖子后,我关闭并销毁了所有模拟器。然后我注意到,当我在运行按钮(带有白色箭头的绿色圆圈)上移动时,它表示程序已经运行,即使没有AVD(模拟器)存在!无论如何,重启eclipse,创建一个AVD并运行它,Bob是我父亲的兄弟。与我的代码或设置完全无关。
之后我发现了这个。它可能会实现同样的目的,但我不能保证它,除非问题再次发生。 http://www.jiahaoliuliu.com/2011/02/stopping-android-applications-already.html /可能/实现相同结果的另一个技巧是在“运行配置”,“目标”选项卡中勾选“擦除用户数据”。
以上是关于Android java.net.UnknownHostException:主机未解析的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )