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或删除并创建模拟器,您只需按照以下步骤操作:

  1. 右键单击您的项目
  2. 点击“运行方式”
  3. 点击“运行配置”
  4. 窗口将被打开
  5. 在左侧面板中选择项目运行配置
  6. 然后在右侧面板中打开“目标”选项卡
  7. 向下滚动
  8. 您将在底部获得一个名为“Additional Emulator Command Line Arguments”的选项
  9. 在文本框中输入“-dns-server 8.8.8.8”这些值(不带双引号)。

而已...

另一答案

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

另一答案

请尝试重新启动模拟器。

另一答案

我一直按照上面的步骤,但仍然没有运气,最后我只是意识到我的应用程序不允许在模拟器中外出互联网。因此,只需在清单文件中添加用户权限即可。完成!感谢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
另一答案

在我的情况下,我从手机上的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 用户权限 )

android 21 是啥版本

Android逆向-Android基础逆向(2-2)

【Android笔记】android Toast

图解Android - Android核心机制

Android游戏开发大全的目录