【问题标题】:Android: UnknownHostException安卓:未知主机异常
【发布时间】:2010-07-22 22:50:44
【问题描述】:

我正在使用 Android SDK 2.2,使用模拟器测试我的应用程序。我想发送一个 HTTP Post。当我这样做时,我得到一个 UnknownHostException。我已放置所需的权限
<uses-permission android:name="android.permission.INTERNET" />
在 manifest.xml 中。我也可以在模拟器上打开浏览器并毫无问题地导航到 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 ); } 这显示错误表示已处理异常。

标签: android http post android-emulator


【解决方案1】:

INTERNET 权限标签是清单标签的子标签,而不是应用标签。

【讨论】:

  • 对于像我这样的其他新手,请在您的清单中的 之后的某处添加以下内容:
【解决方案2】:

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

我最终启动了 android 内置浏览器,并从我的网络服务器和 Google.com 获得了相同的响应(而计算机本身很好)。我终止了android模拟器并重新启动;第一次尝试就成功了。

检查您的代码后,可能值得重新启动模拟器。公平地说,模拟器在执行此操作后不久就崩溃了一堆程序,所以我的计算机中可能发生了其他事情。尽管如此,这对我来说还是浪费了很多时间,所以也许这可以避免我去头痛的人。

【讨论】:

  • 在实际设备上调试同样适用——只需重新启动它 :)
  • Android 模拟器似乎不喜欢一些网络变化,甚至是英特尔 HAXM 加速的 Gingerbread 模拟器。如果我从一个 WiFi 网络移动到一个由 MiFi 供电的网络,它会给我这个错误,我最终会重新启动模拟器。
【解决方案3】:

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

【讨论】:

  • 哦,哇,我不敢相信这是我的问题!使用额外的测试设备时,请确保 wifi 已打开!谢谢
  • 是的,我假设互联网是通过 USB 上的调试电缆进行的,但当然,它直接来自手机!
【解决方案4】:

您知道为我解决的问题是将权限放在关闭清单标记之前,如下所示:

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

【讨论】:

    【解决方案5】:

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

    【讨论】:

      【解决方案6】:

      如果上述方法均无效,请尝试退后一步,确保您的设备或模拟器可以通过打开浏览器实际访问互联网。

      【讨论】:

        【解决方案7】:

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

        【讨论】:

        • 很奇怪,但我遇到了完全相同的问题,更改 de minSdkVersion 也解决了我的问题
        • 这对我也有用。我有 minSdkVersion="7"。我将它设置为“6”并且它起作用了。
        【解决方案8】:

        我遇到了同样的问题。我在我的 Android 清单文件中拥有正确的权限,并且 URL 也是正确的。我在网络浏览器中得到响应。我重新启动了 IDE,模拟器,但没有解决问题。所以我使用 AVD 管理器删除了 AVD,然后启动了模拟器,它开始工作了。

        【讨论】:

          【解决方案9】:

          最后的检查是您的域名是一个有效的域。域中有下划线是无效的,会引发未知主机异常。

          【讨论】:

          • 这是一个罕见的问题,但真的很烦人!见解释here
          【解决方案10】:

          另一件事:事实证明,互联网本身并不适合我。使用这些开关从命令行启动模拟器为我修复了它:emulator -avd your_avd_name -dns-server 8.8.8.8

          【讨论】:

            【解决方案11】:

            我在连接到 WiFi 时看到了这个错误。我一关掉WiFi,它就起作用了。 UnknownHostException 很可能由于这个 Android 错误而被抛出:

            http://code.google.com/p/android/issues/detail?id=67324

            【讨论】:

              【解决方案12】:

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

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

              我的手机没有打开数据,所以我收到了UnknownHostException,一旦我打开它就解决了。

              【讨论】:

                【解决方案13】:

                如果你打开VPN,可能会出现“未知主机异常”

                【讨论】:

                  【解决方案14】:

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

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2013-04-06
                    • 2011-05-24
                    • 2013-05-29
                    • 1970-01-01
                    • 1970-01-01
                    • 2012-07-21
                    • 2018-09-21
                    相关资源
                    最近更新 更多