等待 AsyncTask 完成并加载 Map
Wait for completion of AsyncTask and Loading of Map
我正在编写一个代码,该代码从一个 AsyncTask(HttpUrlConnection)
获取输入以启动另一个 AsyncTask(HttpUrlConnection)
,然后使用该信息将标记添加到 Google 地图。
我面临的问题是,当我尝试通过 onPostExecute
添加标记时,地图尚未加载。但是当我尝试使用 onMapReady
时,数据尚未下载。
有没有一种方法可以让我在尝试放置标记之前等待数据加载和地图准备就绪?
有什么问题使用 2 个布尔值并在数据加载完成和地图加载完成时将它们设置为真,并在每个异步任务中添加检查是否两者都为真然后启动添加标记)
你可以试试下面的逻辑
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(...);
}
}
}
}
Synce 这个问题很笼统,没有提供自定义代码,我会post一个"generic solution":
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...
}
}
我正在编写一个代码,该代码从一个 AsyncTask(HttpUrlConnection)
获取输入以启动另一个 AsyncTask(HttpUrlConnection)
,然后使用该信息将标记添加到 Google 地图。
我面临的问题是,当我尝试通过 onPostExecute
添加标记时,地图尚未加载。但是当我尝试使用 onMapReady
时,数据尚未下载。
有没有一种方法可以让我在尝试放置标记之前等待数据加载和地图准备就绪?
有什么问题使用 2 个布尔值并在数据加载完成和地图加载完成时将它们设置为真,并在每个异步任务中添加检查是否两者都为真然后启动添加标记)
你可以试试下面的逻辑
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(...);
}
}
}
}
Synce 这个问题很笼统,没有提供自定义代码,我会post一个"generic solution":
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...
}
}