无法解析主机“<插入URL>” 主机名没有关联的地址

104

我尝试按照此教程进行操作:从Web获取数据

我在Android 3.0上实现它,这是平板电脑的最新平台,但是我遇到了这个错误:“无法解析主机“www.anddev.org”与主机名关联的地址。

您可以检查一下我使用的URL,以证明该文件存在。 http://www.anddev.org/images/tut/basic/getdatafromtheweb/loadme.txt

我创建了一个私有类,并将其扩展为asynctask。以下是代码:

    private class Downloader extends AsyncTask<String,Void,String>{
    String myString = null;
    @Override
    protected String doInBackground(String... arg0) {
        try{
            URL myURL = new URL("http://www.anddev.org/images/tut/basic/getdatafromtheweb/loadme.txt");
            URLConnection ucon = myURL.openConnection();
            InputStream is = ucon.getInputStream();
            BufferedInputStream bis = new BufferedInputStream(is);

            ByteArrayBuffer baf = new ByteArrayBuffer(50);
            int current = 0;
            while((current=bis.read())!=-1){
                baf.append((byte)current);
            }
            myString = new String (baf.toByteArray());
        }catch(Exception e){
            myString = e.getMessage();
        }
        return myString;
    }
@Override
protected void onPostExecute(String result){
    tv.setText(result);
}
}

非常感谢有人能帮忙。


你可以参考这个链接。希望能对你有所帮助。 - Summved Jain
11个回答

148

我猜你可能忘记给你的应用程序赋予使用互联网的权限了。尝试将以下内容添加到你的Android清单文件中:

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

14
我也有这个问题。我已经正确设置了权限。大部分时间URLConnection都能正常工作。但有时候会连续出现这个错误。由于只是偶尔出现,所以很难调试。 - hendrix
我已经添加了这个权限,但仍然遇到了相同的错误,模拟器有问题吗? - Pratik Butani
7
我遇到了这个错误,是因为之前关闭了移动数据并忘记重新打开。在办公室里一切都很正常,但一旦离开熟悉的WiFi范围,就会出现错误。有时候问题往往出在一些小细节上 :| - Karmic Coder
如果我想在3G网络上工作而不是WiFi呢?在这种情况下我仍然收到这个错误。 - Alaa M.
我浪费了宝贵的8个小时来尝试修复这个错误。真是救命稻草。 - Neyomal
显示剩余5条评论

120
请检查您的互联网连接是否有效。


嗯... :D 我检查了一下,看起来你是对的。我真的不知道为什么,但我的互联网连接没问题,然而模拟器内的浏览器却无法访问任何东西。这很奇怪... 模拟器浏览器几分钟前还能正常工作。 - 황현정
1
我感觉自己像个大傻瓜。我在家里开发,忘记设置WiFi了,而不是在办公室。有时候需要这样的事情来提醒你有时候会很傻。所以,由衷地感谢你让我感觉像个傻瓜! :) - RileyE
2
我也遇到了同样的问题!不知何故,WiFi 和飞行模式可以同时选择,所以我只需要关闭飞行模式(我并没有真正连接到互联网-捂脸)。 - d1jhoni1b
1
不知道为什么我期望我的S3在没有开启无线网络的情况下可以登录。 - Declan McKenna
我昨天关闭了模拟器的互联网连接,今天早上忘记打开了,谢谢! - Robert J. Clegg
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> 我已经给予了这两个权限,但是我们的用户仍然收到上述错误。它在Firebase Crashlytics上反映。请提供其他解决方案。 - Pawan Singh

67

希望您已经获得了许可

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

但是

您可能忘记在手机或其他设备中打开互联网


2
没有将设备连接到WiFi上是我犯错的原因!哎呀。 - Nico
12
重启模拟器解决了我的问题。 - Kacy
感谢您强调了移动设备部分。 :) - Burak Karakuş

12

您能否在内置浏览器中访问该URL?

如果不能,这意味着您的网络设置不正确。如果您在模拟器中,则可以查看文档中的网络部分

如果您使用OS/X系统,在模拟器中即使您正在使用无线网络(en1),模拟器也会使用第一个接口en0,因为没有连接电缆的en0仍被标记为up。您可以执行ifconfig en0 down并重新启动模拟器。我想我曾经读到过类似的行为在Windows上出现过。

如果您正在使用Wifi/3G,请联系您的网络提供商获取正确的DNS设置。


嗯... :D 我检查了一下,看起来你是对的。我真的不知道为什么,但我的互联网连接没问题,然而模拟器内的浏览器无法访问任何内容。这很奇怪... 模拟器的浏览器几分钟前还能正常工作。 - 황현정
谢谢!在我的情况下,因为URL设置为内部网络而导致了错误,使用外部网络显然解决了这个问题。 - CGR

11

如果你像我一样使用USB互联网,仿真器似乎不喜欢连接被打开和关闭,因此你可能需要重新启动仿真器。


6

这个错误是因为您的主机无法通过DNS将其翻译为IP地址。

解决该问题的方法:

1- 确保您已连接到互联网(检查网络质量)。

2- 确保您获得了访问网络的适当权限。

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

5

我遇到了同样的错误,问题是我当时正在使用VPN,但我没有意识到。断开VPN并重新连接wifi后问题得到解决。


2
此外,请确保您的设备未开启飞行模式,或已启用数据使用。

1

我在使用 Android 10 模拟器时也遇到了同样的问题,按照以下步骤解决:

  1. 前往设置 → 网络和互联网 → 高级 → 私人 DNS
  2. 选择私人 DNS 提供程序主机名
  3. 输入:dns.google
  4. 点击保存

这样设置后,您的 URL 应该正常工作。


到目前为止,这似乎对我有效。这个修复程序具体是做什么的?谢谢。 - Peter G. Williams
1
@PeterG.Williams,看起来模拟器上的默认Android DNS无法进行正确的域名解析,因此在这种设置下,我们明确要求使用Google的DNS服务。 - Kylo-Rey

0

在某些情况下,重新启动模拟器是有效的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接