我不知道如何使用线程;我只是想学习如何制作一个简单的android程序,但是我试图使用api并得到一个NetworkOnMainThread异常。 我读到这意味着我需要将我的httpUrlConnection放在后台线程中(doInBackground显然可能会有帮助),但我在互联网上遇到教程问题。
我现在有一个名为getResults的方法,它接受一个字符串并返回一个列表。是否有一种简单的方法来调整doInBackground,以便我不必改变我的方法?
使用doInBackground(或任何其他方法)如何执行此操作的示例将很不错。
答案 0 :(得分:0)
在网络上有关于这些问题的很多信息,只是谷歌。
通常,当您想要运行网络请求时,您应该在另一个线程中执行它,而不是您的UI线程。 AsyncTask是实现这一目标的常见方法之一。
的示例private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
protected Long doInBackground(URL... urls) {
//this is the place for the long background work
int count = urls.length;
long totalSize = 0;
for (int i = 0; i < count; i++) {
totalSize += Downloader.downloadFile(urls[i]);
publishProgress((int) ((i / (float) count) * 100));
// Escape early if cancel() is called
if (isCancelled()) break;
}
return totalSize;
}
protected void onProgressUpdate(Integer... progress) {
//If needed here you can update the UI about the progress.
}
protected void onPostExecute(Long result) {
//Here you can update the UI
}
}
你也应该阅读Darkean评论的Connecting to the Network。
这也是非常推荐Android background processing with Handlers, AsyncTask and Loaders - Tutorial l