我正在尝试使用JSOUP HTML解析库来使用
获取HTML文档Document doc = Jsoup.parse(u, 1000);
我收到错误"android.os.NetworkOnMainThreadException"
我理解它,因为我需要在主线程以外的地方进行下载,但我不明白如何解决这个问题。
如果我使用线程,我需要能够返回doc
,以便我可以在下载完成时解析。
你可以帮我解决这个问题吗?
我正在使用的课程如下:
public class DataSorter{
private Document doc;
DataSorter(){
downloadData();
}
private void downloadData() throws IOException{
String url = "www.google.com";
URL u = new URL(url);
System.out.println("Downloading....");
doc = Jsoup.parse(u, 5000); //Time out 5000ms
System.out.println("Download Successful");
}
Document getDoc(){
return doc;
}
}
答案 0 :(得分:2)
您正在主ui线程上执行网络相关操作。使用Thread
或AsyncTask
http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html
AsyncTask docs
http://developer.android.com/reference/android/os/AsyncTask.html
类似的帖子@
How to fix android.os.NetworkOnMainThreadException?
您可以使用Thread
但请记住您可以在ui线程上更新ui,而不是在后台线程上更新。
您可以使用AsyncTask使用onPreExecute
和onPostExecute
来更新ui。使用doInbackground
进行与网络相关的操作。
移动此
Document doc = Jsoup.parse(u, 1000);
在AsyncTask的Thread
或doInbackground
内。
答案 1 :(得分:2)
答案 2 :(得分:1)
android.os.NetworkOnMainThreadException
因为您正在执行network operations in main UI thread
以太使用AsyncTask
或Thread
参考AsyncTask http://developer.android.com/reference/android/os/AsyncTask.html