我找到了以下代码,它应该让我从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时,它打开正常.
我对网络的东西不是很好,有人可以帮忙,谢谢
例如,您不应该在主线程上执行网络请求,尝试使用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)
查看此问题以获取更多信息.
| 归档时间: |
|
| 查看次数: |
6175 次 |
| 最近记录: |