android - Android 中的 NetworkOnMainThreadException 错误

标签 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;
   }
}

最佳答案

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

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

AsyncTask 文档

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 中。

关于android - Android 中的 NetworkOnMainThreadException 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18154019/

相关文章:

java - 在android中的按钮上绘制不同的颜色

java - ActionBarDrawerToggle() 图标无法设置为 Android SDK 5 中的 ActionBar

android - CSS div 覆盖标签在桌面版 Chrome 中运行良好,但在 Android 版 Chrome 中运行不佳

networking - 如何在 VirtualBox 上 ping ubuntu guest

java - 网络游戏状态更改时小程序游戏更新屏幕

android - 尝试加载 "font.TTF"结果为 "error reading file" "file not found"

c++ - std::unique_lock<mutex> 和 conditional_variable cond 的关系

java - CompletableFuture 的执行顺序

java - 尝试遵循基本的如何将 Android 与 PHP、MySQL 教程连接起来 : application crashes - cannot import android. os.StrictMode

ios - 如何检测iOS中的wifi网络变化