httpurlclient在android中是可以读到url表示的网页中的内容的,但是在webview中,使用就会出错,代码如下:wv.loadUrl("http://www.baidu.com");
wv.setWebViewClient(new WebViewClient() { @Override
public void onPageFinished(WebView view, String url) {
// TODO Auto-generated method stub
super.onPageFinished(view, url);
} @Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
URL cumtURL;
try {
cumtURL = new URL(url);
URLConnection cumtConnection = cumtURL.openConnection();
DataInputStream din = new DataInputStream(cumtConnection
.getInputStream());
String inputLine;
while ((inputLine = din.readLine()) != null) {
System.out.println(inputLine);
}
din.close(); } catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});错误是:android.os.NetworkOnMainThreadException
请问为什么呢?

解决方案 »

  1.   

    楼上正解 你的主线程的acitivity的onCreate函数中 增加如下判别
    // TODO Auto-generated method stub
    String strVer=GetVersion.GetSystemVersion();
    strVer=strVer.substring(0,3).trim();
    float fv=Float.valueOf(strVer);
    if(fv>2.3)
    {
    StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
    .detectDiskReads()
    .detectDiskWrites()
    .detectNetwork() // 这里可以替换为detectAll() 就包括了磁盘读写和网络I/O
    .penaltyLog() //打印logcat,当然也可以定位到dropbox,通过文件保存相应的log
    .build());
    StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
    .detectLeakedSqlLiteObjects() //探测SQLite数据库操作
    .penaltyLog() //打印logcat
    .penaltyDeath()
    .build()); 
    }
    给你应用放行 或者loadurl放到异步中