我正在编写一个代码,该代码从一个AsyncTask(HttpUrlConnection)
获取输入以启动另一个AsyncTask(HttpUrlConnection)
,然后使用该信息将标记添加到 Google Map 。
我遇到的问题是,当我尝试通过onPostExecute
添加标记时,地图尚未加载。但是当我尝试使用onMapReady
时,尚未下载数据。
在尝试放置标记之前,有没有办法可以等待数据加载和地图准备好?
答案 0 :(得分:2)
同一个问题是非常通用的,没有提供自定义代码,我将发布一个“通用解决方案”:
boolean isStep1Done = false;
boolean isStep2Done = false;
private class ExampleOperation extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
Thread.sleep(1000);
return "Completed";
}
@Override
protected void onPostExecute(String result) {
isStep1Done = true;
continueLogic();
}
@Override
protected void onPreExecute() {}
@Override
protected void onProgressUpdate(Void... values) {}
}
ExampleOperation 2也是如此,它将isStep2Done设置为true。
然后,如果它们是顺序的,你可以继续,如果它们是独立的,你可以在每个调用continueLogic()
上继续,并且在这个函数的第一步,你检查所有的标志。
private void continueLogic(){
if(isStep1Done && isStep2Done ){
stuffs...
}
}
答案 1 :(得分:0)
问题是什么使用2个布尔值并在数据加载完成时将它们设置为true并且在完成地图加载时以及在每个异步任务中添加检查是否为true然后启动添加标记)
答案 2 :(得分:0)
您可以尝试以下逻辑。
public class MyAct extends Activity implements OnMapReadyCallback {
private GoogleMap mMap;
private List<YourObj> mItems;
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
populateMap();
}
private class MyTask extends AsyncTask {
...
protected void onPostExecute(List<YourObj> results) {
mItems = results;
populateMap();
}
}
private void populateMap() {
if (mMap != null && mItems != null) {
for (YourObj o : mItems) {
mMap.addMarker(...);
}
}
}
}
&#13;