2016-08-01 42 views
1

我在更新我的SDK 今天之前有工作代碼(供將來參考看問題日期)。 .getMap用於給出已過時的警告,但現在它甚至不被認爲是有效的輸入。我認爲這是由於API 24(Android Nougat)的新發布而發生的。事不宜遲,這裏的代碼:如何使我的項目與getMapAsync兼容?

private boolean initMap() { 
     if (mMap == null) { 
      MapFragment mapFrag = 
        (MapFragment) getFragmentManager().findFragmentById(R.id.map); 
      mMap = mapFrag.getMapAsync(); 
     } 
     return (mMap != null); 
    } 

如果有人可以幫我修改整合.getMapAsync()我真的很感激它。

謝謝!

更新:這是看着答案的建議後,新的和更新的代碼(這不是在OnCreate) -

private boolean initMap() { 
     if (mMap == null) { 
      MapFragment mapFrag = (MapFragment) getFragmentManager() 
        .findFragmentById(R.id.map); 
      mapFrag.getMapAsync(this); 
     } 
      return (mMap != null); 
    } 

    @Override 
    public void onMapReady(GoogleMap googleMap) { 
     if (googleMap != null) { 
      mMap = googleMap; 
     } 
    } 
+0

你試過什麼嗎?你可以參考文檔並嘗試一下,看看會發生什麼? – nasch

+0

@nasch我試圖在空括號中添加'(GoogleMaps googlemaps)',但它不起作用。 – petnamedsteve

+0

你爲什麼這樣做?文檔說要傳入一個'OnMapReadyCallback',而不是'GoogleMap'。 – nasch

回答

1

你需要什麼:在你的gradle這個文件

1. compile 'com.google.android.gms:play-services-maps:9.2.0'(最新的地圖lib),如果你不能使用它,你可能需要下載最新的工具。

2.加載地圖片段的活動必須執行OnMapReadyCallback。 (這是最簡單的方法,你可以創建一個不同的類來實現OnMapReadyCallback)。

3.In活動onCreate方法,你需要做到以下幾點:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    /// additiona code here 
    MapFragment mapFrag = (MapFragment) getFragmentManager().findFragmentById(R.id.map); 
    mapFrag.getMapAsync(this); //this is instance of your activity. 
    //maybe code here 
} 

//callback method from OnMapReadyCallback 
@Override 
public void onMapReady(GoogleMap googleMap) { 
    if (googleMap != null) { 
     mMap = googleMap; 
     //now the map is loaded, you can use it 
    } 
} 

編輯後的代碼編輯就這麼POST

initMap是錯誤的,它不能返回boolean值,因爲getMapAsync正如名稱所述,異步,這意味着該方法將被執行並且它將立即返回,而不是等待完成,因此return (mMap != null);幾乎總是會返回false。您應該使用onMapReady來檢查地圖是否已加載。

+0

感謝您的回答!請查看更新的代碼:D – petnamedsteve

+0

@petnamedsteve請檢查我編輯的答案。 – danypata

+0

對不起,我沒有得到你。如果我正確地得到了你,我必須在「onMapReady」中放置「if map null」。如果是這樣的話,請給我一個給我一個確切的代碼,因爲我不明白該怎麼做。謝謝! – petnamedsteve

1

都需要這樣的

mapFrag = (SupportMapFragment) getSupportFragmentManager() 
      .findFragmentById(R.id.map); 
    mapFrag.getMapAsync(this); 

打電話,讓你的actifity(例如)實施OnMapReadyCallback。 然後覆蓋返回方法onMapReady(谷歌地圖googleMap)

+0

看起來像我張貼我的答案後者))) –

+0

感謝您的回答!請查看更新的代碼:D – petnamedsteve

相關問題