好的,我在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项目中没有。
寻求帮助!
答案 0 :(得分: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 ...
答案 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