android无法连接到URL

ste*_*veh 2 url android

我找到了以下代码,它应该让我从web主机(在这种情况下我的网站)中读取目录内容

String urlStr = "http://2112design.com/tabs/drum_tabs";
URL url;
try {
    url = new URL(urlStr);
    java.net.URLConnection con = url.openConnection();
    con.connect();
    java.io.BufferedReader in =
      new java.io.BufferedReader(new java.io.InputStreamReader(con.getInputStream()));
    String line;
    for (; (line = in.readLine()) != null; ) {
        Log.d("MainActivity", "read from web "+line);
    }
} catch (MalformedURLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

当我运行它时,con.connect(); 失败,错误跟踪如下:

android.os.NetworkOnMainThreadException
android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1118)
java.net.InetAddress.lookupHostByName(InetAddress.java:385)
Run Code Online (Sandbox Code Playgroud)

看起来有某种权限问题StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1118)但是当我在同一设备上使用网络浏览器并转到该URL时,它打开正常.

我对网络的东西不是很好,有人可以帮忙,谢谢

Ara*_*ram 5

例如,您不应该在主线程上执行网络请求,尝试使用AsyncTask或启动新线程.

     (new Thread(new Runnable() {

                                        @Override
                                        public void run() {
                                            try {
                                                url = new URL(urlStr);
                                                java.net.URLConnection con = url.openConnection();
                                                con.connect();
                                                java.io.BufferedReader in =
                                                  new java.io.BufferedReader(new java.io.InputStreamReader(con.getInputStream()));
                                                String line;
                                                for (; (line = in.readLine()) != null; ) {
                                                    Log.d("MainActivity", "read from web "+line);
                                                }
                                            } catch (MalformedURLException e) {
                                                // TODO Auto-generated catch block
                                                e.printStackTrace();
                                            } catch (IOException e) {
                                                // TODO Auto-generated catch block
                                                e.printStackTrace();
                                            }

                                        }
                                    })).start();
Run Code Online (Sandbox Code Playgroud)

或者你可以使用

    if (android.os.Build.VERSION.SDK_INT > 9) {
        StrictMode.ThreadPolicy policy = 
             new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
Run Code Online (Sandbox Code Playgroud)

查看问题以获取更多信息.