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

时间:2012-11-10 13:15:10

标签: android json connect

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

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

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

所以据我所知,我必须使用AsyncTask,但我不知道如何将我的函数包装进去。

功能如下:

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

就像我说它在普通的JavaApplication中工作正常但在android项目中没有。

寻求帮助!

3 个答案:

答案 0 :(得分:0)

据我了解,您使用AndroidHttpClient - >所以你甚至无法尝试在UI线程中执行网络操作 - >所以为此目的创建单独的线程。您可以使用AsynchTaskThread + HandlerHandlerThread来实现此目的,也可以尝试使用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 ...

答案 1 :(得分:0)

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

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

您的“get”函数必须在此类

中拆分为2个单独的函数

你想进入什么,放入

doInBackground

您想要对收到的数据做什么

onPostExecute

答案 2 :(得分:0)

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

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