如何使用doInBackground摆脱NetworkOnMainThread异常

时间:2015-10-18 22:12:25

标签: java android multithreading networkonmainthread

我不知道如何使用线程;我只是想学习如何制作一个简单的android程序,但是我试图使用api并得到一个NetworkOnMainThread异常。 我读到这意味着我需要将我的httpUrlConnection放在后台线程中(doInBackground显然可能会有帮助),但我在互联网上遇到教程问题。

我现在有一个名为getResults的方法,它接受一个字符串并返回一个列表。是否有一种简单的方法来调整doInBackground,以便我不必改变我的方法?

使用doInBackground(或任何其他方法)如何执行此操作的示例将很不错。

1 个答案:

答案 0 :(得分:0)

在网络上有关于这些问题的很多信息,只是谷歌。

通常,当您想要运行网络请求时,您应该在另一个线程中执行它,而不是您的UI线程。 AsyncTask是实现这一目标的常见方法之一。

来自Android Developers

的示例
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