Android:UnknownHostException


68

我正在使用Android SDK 2.2,并在模拟器上测试我的应用程序。我想发送一个HTTP Post。当我得到一个UnknownHostException。我已经在manifest.xml中放置了所需的权限
<uses-permission android:name="android.permission.INTERNET" />
。另外,我可以在模拟器上打开浏览器,然后毫无问题地导航到URL。

这是我的代码:

HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost( uri );
HttpResponse response = null;
try
{
// Add your data
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(
2 );
nameValuePairs.add( new BasicNameValuePair( "id", "edit-name" ) );
nameValuePairs
.add( new BasicNameValuePair( "stringdata", userName ) );
httppost.setEntity( new UrlEncodedFormEntity( nameValuePairs ) );

// Execute HTTP Post Request
response = httpclient.execute( httppost );
// Log.i( "HttpManager:", "======> response: "
// + response.getEntity().getContent() );

}
catch (ClientProtocolException e)
{
Log.e( "HttpManager", "ClientProtocolException thrown" + e );
}
catch (IOException e)
{
Log.e( "HttpManager", "IOException thrown" + e );
}

} catch(Exception e) { System.out.println("Error:"+e); } catch (ClientProtocolException e) { Log.e( "HttpManager", "ClientProtocolException thrown" + e ); } catch (IOException e) { Log.e( "HttpManager", "IOException thrown" + e ); } 这表明错误已被视为已处理的异常。
Hackbal Teamz

Answers:


116

好的,我感觉很la脚... INTERNET权限标签是清单标签的子级,而不是应用程序标签的子级。嘘!


1
对于像我这样的其他新手,请在<manigest>之后的清单中添加以下内容:<uses-permission android:name =“ android.permission.INTERNET” />
Alex Rashkov

51

为了其他人的考虑,我遇到了这个问题,谷歌让我着陆。正如anisbet所提到的,我仔细检查了我的许可标签,它位于正确的位置。

最终,我启动了内置浏览器的android系统,并从我的网络服务器和Google.com获得了相同的响应(尽管计算机本身还不错)。我终止了android模拟器并重新启动;进行了第一次尝试。

查看完代码后,值得重新启动模拟器。公平地说,在执行此操作后不久,一堆程序崩溃了,所以我的计算机上可能正在发生其他事情。尽管如此,这仍然浪费了我很多时间,所以也许这会让我免于头痛。

祝你好运!


同样适用于在实际设备上进行调试的方法-只需重新启动它即可:)
MSpeed 2011年

Android模拟器似乎不喜欢某些网络更改,即使是英特尔HAXM加速的姜饼也是如此。如果我从一个WiFi网络转移到一个由MiFi驱动的网络,它会给我这个错误,最终我会重新启动模拟器。
louielouie 2012年

34

确保您已连接互联网。这就是我忘记使用没有互联网连接的手机进行测试时发生的事情。


1
哦,我无法相信这是我的问题!使用额外的测试设备时,请确保wifi开启!谢谢
Glenn.nz 2013年

是的,我以为互联网正在通过USB调试电缆进行连接,但是当然,它直接来自电话!
卢克斯2013年

17

您知道为我解决了什么是将权限放在结束清单标记之前,如下所示:

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

9

有时在模拟器中运行应用程序时会发生这种情况。只需重启模拟器即可解决问题。它对我有用!


5

如果以上方法均无效,请尝试退后一步,并通过打开浏览器来确保设备或仿真器可以真正访问Internet。


2

在测试将minSdkVersion设置为4的应用程序时,我遇到了类似的问题,而我试图在G1上运行它。将其更改为3可以为我解决问题。


很奇怪,但我遇到了完全相同的问题,更改minSdkVersion也为我解决了该问题
Mark Mooibroek

这也对我有用。我有minSdkVersion =“ 7”。我将其设置为“ 6”,它可以正常工作。
盖奇

2

我遇到了同样的问题。我在Android Manifest文件中具有正确的权限,并且网址也正确。我正在Web浏览器中得到响应。我重新启动了IDE仿真器,但没有解决问题。因此,我使用AVD管理器删除了AVD,然后启动了模拟器,它开始工作。


2

最终检查将是您的域名是有效域名。域中的下划线无效,并且将引发未知的主机异常。


这是一个罕见的问题,但确实很烦人!看到这里的
卡佩2015年

1

另一件事:事实证明,互联网本身对我不起作用。使用这些开关从命令行启动仿真器可以为我修复它:emulator -avd your_avd_name -dns-server 8.8.8.8



0

如果您不使用模拟器,也请检查此

我今天遇到了同样的问题,我没有使用仿真器,而是在移动设备中启用了USB调试以进行测试。

我没有在手机上打开数据,所以打开电源后就UnknownHostException解决了。



0

使用模拟器时,我遇到了同样的问题,因为我在笔记本电脑上更改了wifi,因此重新启动模拟器的wifi解决了我的问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.