Android 从互联网获取数据(android.os.NetworkOnMainThreadException)

问题描述 投票:0回答:3

好吧,我已经在 StackOverflow 上阅读了很多问题,但我仍然无法理解,所以我提出了一个新问题。

我创建了一个类,该类的函数连接到互联网并以字符串形式获取 json。它在普通的 Java 应用程序中工作正常,但我无法在我的 android 项目中工作。

我收到下一个错误:android.os.NetworkOnMainThreadException

所以据我了解,我必须使用 AsyncTask,但我不知道如何将我的函数包装到其中。

函数如下所示:

public static String get(String url){
  //connect and get data to string
  // return string
}

就像我说的,它在普通的 Java 应用程序中运行良好,但在 Android 项目中则不然。

感谢帮助!

android json
3个回答
0
投票

http://developer.android.com/reference/android/os/AsyncTask.html 看样品

 private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
}

你的“get”函数必须在这个类中分成2个单独的函数

你想放进去的东西,放进去

doInBackground

以及您想如何处理收到的数据

onPostExecute

0
投票

据我了解,您使用

AndroidHttpClient
-> 因此您甚至无法尝试在 UI 线程中执行网络操作 -> 因此为此目的创建单独的线程。您可以使用
AsynchTask
Thread + Handler
HandlerThread
来实现此目的,或者您可以尝试使用
java.util.concurrent
包进行实验。

NetworkOnMainThreadException | Android Developers
developer.android.com/... - 
Class Overview. The exception that is thrown when an application attempts to perform a networking operation on its main thread. This is only thrown for ...

0
投票

您可以创建扩展 AsyncTask 的线程方法(正如您正确理解的那样),并使用

.execute()
执行它。

具体如何设置取决于您。这是有关旋转这些线程的教程的链接: http://www.vogella.com/articles/AndroidPerformance/article.html#concurrency_threads

© www.soinside.com 2019 - 2024. All rights reserved.