我正在編寫一個代碼,它從一個AsyncTask(HttpUrlConnection)
開始輸入另一個AsyncTask(HttpUrlConnection)
,然後使用該信息將標記添加到Google地圖。等待完成AsyncTask和加載地圖
我面臨的問題是,當我試圖通過onPostExecute
添加標記時,地圖尚未加載。但是,當我嘗試使用onMapReady
數據尚未下載。
在嘗試放置標記之前,我是否可以等待加載數據和地圖準備就緒?
我正在編寫一個代碼,它從一個AsyncTask(HttpUrlConnection)
開始輸入另一個AsyncTask(HttpUrlConnection)
,然後使用該信息將標記添加到Google地圖。等待完成AsyncTask和加載地圖
我面臨的問題是,當我試圖通過onPostExecute
添加標記時,地圖尚未加載。但是,當我嘗試使用onMapReady
數據尚未下載。
在嘗試放置標記之前,我是否可以等待加載數據和地圖準備就緒?
對SyncE問題是非常通用的,沒有提供自定義代碼,我將發佈一個 「通用的解決方案」:
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...
}
}
是什麼問題使用2個布爾值,並將其設置爲true時的數據加載與時地圖加載完成,在每個這種異步任務添加檢查,如果雙方真實然後啓動添加標記)
這不是說它只檢查一次,如果不是這樣,它就完全跳過這一步。 –
的事情是,你會檢查2次,每個異步任務,如果任務1將首先結束,那麼你將填寫第二個數據,如果第二個將首先結束,那麼你將填寫所有數據在第一個結束時) –
你可以試試遵循邏輯。
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(...);
}
}
}
}
使用onFinished方法使用自定義偵聽器(接口),並在postExecute上調用該偵聽器。既然你需要做兩個asynks,你需要做兩次(或者只需要在同一個doInBackground中做兩次請求) – user6547359
你可以爲每個「步驟完成」設置標誌,或者使用[Future](https:// developer .android.com/reference/java/util/concurrent/Future.html)for syncronicity – Bonatti
@Bonatti我該怎麼做(代碼請)? –