等待完成AsyncTask和加载Map

时间:2016-07-12 13:40:37

标签: android android-asynctask google-maps-android-api-2 httpurlconnection

我正在编写一个代码,该代码从一个AsyncTask(HttpUrlConnection)获取输入以启动另一个AsyncTask(HttpUrlConnection),然后使用该信息将标记添加到 Google Map

我遇到的问题是,当我尝试通过onPostExecute添加标记时,地图尚未加载。但是当我尝试使用onMapReady时,尚未下载数据。

在尝试放置标记之前,有没有办法可以等待数据加载和地图准备好?

3 个答案:

答案 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)

您可以尝试以下逻辑。

&#13;
&#13;
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;
&#13;
&#13;