好吧,我已经在 StackOverflow 上阅读了很多问题,但我仍然无法理解,所以我提出了一个新问题。
我创建了一个类,该类的函数连接到互联网并以字符串形式获取 json。它在普通的 Java 应用程序中工作正常,但我无法在我的 android 项目中工作。
我收到下一个错误:android.os.NetworkOnMainThreadException
所以据我了解,我必须使用 AsyncTask,但我不知道如何将我的函数包装到其中。
函数如下所示:
public static String get(String url){
//connect and get data to string
// return string
}
就像我说的,它在普通的 Java 应用程序中运行良好,但在 Android 项目中则不然。
感谢帮助!
http://developer.android.com/reference/android/os/AsyncTask.html 看样品
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
}
你的“get”函数必须在这个类中分成2个单独的函数
你想放进去的东西,放进去
doInBackground
以及您想如何处理收到的数据
onPostExecute
据我了解,您使用
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 ...
您可以创建扩展 AsyncTask 的线程方法(正如您正确理解的那样),并使用
.execute()
执行它。
具体如何设置取决于您。这是有关旋转这些线程的教程的链接: http://www.vogella.com/articles/AndroidPerformance/article.html#concurrency_threads