Android中的NetworkOnMainThreadException错误

时间:2013-08-09 19:13:39

标签: android multithreading networking

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

3 个答案:

答案 0 :(得分:2)

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

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使用onPreExecuteonPostExecute来更新ui。使用doInbackground进行与网络相关的操作。

移动此

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

在AsyncTask的ThreaddoInbackground内。

答案 1 :(得分:2)

使用asynctask并将doc返回给onPostExecute

请参阅此链接有关asynctask

AsyncTask Android example

答案 2 :(得分:1)

android.os.NetworkOnMainThreadException

因为您正在执行network operations in main UI thread

以太使用AsyncTaskThread

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