Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 异步填充listView_Android_Listview_Android Asynctask - Fatal编程技术网

Android 异步填充listView

Android 异步填充listView,android,listview,android-asynctask,Android,Listview,Android Asynctask,这是我的问题: 我获取手机的gps坐标,并将其与Google Directions API结合使用,以获取手机与我所在城市的一些建筑物之间的距离。建筑物位置存储在xml文件中 我使用asyncTask循环所有建筑物的坐标,并从GoogleAPI获取建筑物和电话之间的距离 问题是,有时当我得到许多建筑物时,需要很长时间才能完成所有请求,然后才能显示列表,我想知道如何做到这一点: 如何在每次请求完成时更新listView: 例如:当列表第一次为空时,我向GoogleAPI发出一个请求,在列表中得到一

这是我的问题:

我获取手机的gps坐标,并将其与Google Directions API结合使用,以获取手机与我所在城市的一些建筑物之间的距离。建筑物位置存储在xml文件中

我使用asyncTask循环所有建筑物的坐标,并从GoogleAPI获取建筑物和电话之间的距离

问题是,有时当我得到许多建筑物时,需要很长时间才能完成所有请求,然后才能显示列表,我想知道如何做到这一点:

如何在每次请求完成时更新listView:

例如:当列表第一次为空时,我向GoogleAPI发出一个请求,在列表中得到一个项目,然后是另一个请求。这样我就不用等到所有的请求都完成了

我认为,如果我有20个建筑物坐标,就不能创建20个异步任务实例

谢谢,,
Catalin

IMO在runOnUiThread中调用notifyDataSetChanged的最简单方法:

private class DownloadAsyncTask extends AsyncTask<Void, Recording, Void> {

  protected Void doInBackground(Void... parms) {
    for (DownloadTask task: tasks) {
      DownloadData downloadData = downloadSomething(task);
      runOnUiThread(new Runnable() {
        public void run() {
          listAdapter.add(downloadData);
          listAdapter.notifyDataSetChanged();
        }
      });
    }
  } // end of doInBackground()
}

希望有帮助。

或使用publishProgress从内部doInBackground并在UI线程内部处理它onProgressUpdate@FunkTheMonk,是的,这是一种更为面向对象的方式,尽管需要在doInBackground和onProgressUpdate之间使用carry/pass param/object,但可能不是最简单的方式: