当前位置: 代码迷 >> Android >> webview中应用HttpURLConnection解析url出错
  详细解决方案

webview中应用HttpURLConnection解析url出错

热度:75   发布时间:2016-05-01 10:39:03.0
webview中使用HttpURLConnection解析url出错
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
请问为什么呢?

------解决方案--------------------
不能在主线程中进行网络访问操作,好像是4.0以后的限制
------解决方案--------------------
楼上正解 你的主线程的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放到异步中