1

我正在尝试使用 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;
   }
}
4

3 回答 3

2

使用异步任务并将文档返回到 onPostExecute

看到这个关于异步任务的链接

AsyncTask Android 示例

于 2013-08-09T19:16:06.420 回答
2

您正在主 ui 线程上执行网络相关操作。使用ThreadAsyncTask

http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html

AsyncTask 文档

http://developer.android.com/reference/android/os/AsyncTask.html

类似的帖子@

如何修复 android.os.NetworkOnMainThreadException?

您可以使用 aThread但请记住您可以在 ui 线程上而不是在后台线程上更新 ui。

您可以使用 AsyncTask 使用onPreExecuteonPostExecute更新 ui。doInbackground用来做你的网络相关操作。

移动这个

   Document doc = Jsoup.parse(u, 1000);

在AsyncTask的Threador中。doInbackground

于 2013-08-09T19:15:33.627 回答
1
android.os.NetworkOnMainThreadException

因为你在表演network operations in main UI thread

乙醚使用AsyncTaskThread

AsyncTask 参考http://developer.android.com/reference/android/os/AsyncTask.html

于 2013-08-09T19:15:20.740 回答