java.net.UnknownHostException:无法解析主机[LOCAL]

时间:2017-01-17 19:00:36

标签: android windows url avd

我在清单文件中使用INTERNET使用权限。

如果我输入URL url = new URL('http://www.example.com/page')(远程服务器),它将起作用。 但是,如果我键入URL url = new URL('http://example.local/page')(本地服务器),它将返回错误

java.net.UnknownHostException: Unable to resolve host "example.local": No address associated with hostname

现在在%WINDIR%/System32/drivers/etc/hosts我写了这个条目:

10.101.0.179  example.local

我无法使用new URL('http://10.101.0.179/page'),因为在我的apache配置中,example.local是一个虚拟主机。

我的AVD无法查看 hosts 文件吗?我该怎么做才能告诉android获取ip 10.101.0.179但是仍然向apache发送适当的信息并告诉它为虚拟主机example.local提供服务?

2 个答案:

答案 0 :(得分:1)

如果您尝试从本地HTTP服务器请求网页,并且页面被限制为 virtualHost ,那么就说您需要到达http://example.local/mypage并且如果指向的话@CommonsWare你没有使用mDNS解析本地域名,android可能会抛出与此问题标题中读取的错误信息相同的错误信息。这是我正在使用的解决方案:

让我们说http://example.local/mypage指的是IP地址10.101.0.179,Android无法解析example.local,您需要编写原始网址(你真正的本地服务器)

try {
  ...
  URL url = new URL("http://10.101.0.179/mypage");
  HttpUrlConnection conn = (HttpUrlConnection) url.openConnection();
  ...
}
...

但是现在当Apache收到此请求时,除非为您所需的主机提供服务,否则{em> VirtualHost 无法理解10.101.0.179。要解决此问题,只需使用Host修改setRequestProperty http-header属性:

...
conn.setRequestProperty("Host", "example.local");
...

它应该有用。

答案 1 :(得分:0)

首先,您必须检查您的清单文件中是否已授予INTERNET权限,然后确保您的模拟器或计算机具有有效的Internet。如果它不起作用,则可以执行以下操作:

如果您使用的是localhost网址,则必须将该网址转换为IP地址,才能使用Android模拟器专门使用App。

例如:

我当前的网址是

http://mylocaladdress:9090/myapp.svc/ForgetPassword?EmailID=test@test.com

现在您可以将以下命令放在mac上的终端中,或者您可以在Windows上使用cmd

ping mylocaladdress

结果将为您提供IP地址,我的最终网址将变为

http://10.1.2.111:9090/myapp.svc/ForgetPassword?EmailID=test@test.com

这个网址在android模拟器中完美无缺。