0

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

我创建了一个函数连接到互联网并将json作为字符串获取的类。它在普通的 Java 应用程序中运行良好,但我无法在我的 android 项目中运行。

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

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

函数如下所示:

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

就像我说的那样,它在普通的 JavaApplication 中运行良好,但在 android 项目中却不行。

谢谢帮助!

4

3 回答 3

0

据我了解,您使用AndroidHttpClient->因此您甚至不能尝试在 UI 线程中执行网络操作->因此为此目的创建单独的线程。您可以使用AsynchTask,Thread + HandlerHandlerThread为此目的,或者您可以尝试在此处使用 package.json 进行试验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 ...
于 2012-11-10T13:20:44.393 回答
0

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

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

您的“get”函数必须在此类中拆分为 2 个单独的函数

你想得到什么,放进去

doInBackground

以及您想对收到的数据做什么

onPostExecute
于 2012-11-10T13:22:57.967 回答
0

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

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

于 2012-11-10T13:23:21.960 回答