2016-12-08 7 views
0

У меня был старый Android-проект, который я оставил, и я решил его поднять. Но Im получает ошибку «Не удается разрешить метод getMap()». Я пробовал делать что-то here, here и here, но я все равно застрял. Я знаю, что Im должен использовать getMapAsync, но я предполагаю, что Im не смог реализовать это с помощью MapViewНе удается разрешить метод getMap() в Google Maps 10.0.1

Я думаю, возможно, это потому, что я использую MapView, а не SupportMapFragment. Я тоже попытался изменить это, но я потерпел неудачу на этом пути.

Вот он зависимостей я хочу использовать или, вернее, им с помощью:

compile 'com.google.android.gms:play-services-maps:10.0.1' //one with error 
//compile 'com.google.android.gms:play-services-maps:7.3.0' //one which works 

У меня есть несколько методов, которые в настоящее время помечены как им с помощью GetMap(), более чем один раз, но ошибка помечено здесь:

GoogleMap map = ((MapView) mRootView.findViewById(R.id.mapview)).getMap(); 

MapView отображается в следующем:

<com.google.android.gms.maps.MapView 
     android:id="@+id/mapview" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" /> 

Im получение следующее сообщение об ошибке:

12-09 09:14:33.231 15831-15831/com.empire.vince.vokers.yoworld E/AndroidRuntime: FATAL EXCEPTION: main 
                      Process: com.empire.vince.vokers.yoworld, PID: 15831 
                      java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.maps.android.clustering.ClusterManager.clearItems()' on a null object reference 
                       at com.empire.vince.vokers.yoworld.mafragments.MapFragment.renderView(MapFragment.java:465) 
                       at com.empire.vince.vokers.yoworld.mafragments.MapFragment.onMapReady(MapFragment.java:433) 
                       at com.google.android.gms.maps.MapView$zza$1.zza(Unknown Source) 
                       at com.google.android.gms.maps.internal.zzt$zza.onTransact(Unknown Source) 
                       at android.os.Binder.transact(Binder.java:387) 
                       at zu.a(:com.google.android.gms.DynamiteModulesB:82) 
                       at maps.ad.t$5.run(Unknown Source) 
                       at android.os.Handler.handleCallback(Handler.java:739) 
                       at android.os.Handler.dispatchMessage(Handler.java:95) 
                       at android.os.Looper.loop(Looper.java:234) 
                       at android.app.ActivityThread.main(ActivityThread.java:5526) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

Это первая функция 4, которые с помощью объекта GoogleMap:

private void gimmeView() 
{ 
    // reference 

    //final GoogleMap map = ((MapView) mRootView.findViewById(R.id.mapview)).getMap(); 
    final AdView adView = (AdView) mRootView.findViewById(R.id.adview); 

    // map 
    if(mGoogleMap!=null) 
    { 
     // add pois 
     mGoogleMap.clear(); 
     mClusterManager.clearItems(); 
     for(PoiModel poi : mPoiList) 
     { 
      mClusterManager.addItem(poi); 
     } 
     mClusterManager.cluster(); 
    } 

    // admob 
    if(YoWorldConfig.ADMOB_MAP_BANNER && NetworkManager.isOnline(getActivity())) 
    { 
     AdRequest adRequest = new AdRequest.Builder() 
       .addTestDevice(AdRequest.DEVICE_ID_EMULATOR) 
       .addTestDevice(getString(R.string.admob_test_device_id)) 
       .build(); 
     adView.loadAd(adRequest); 
     adView.setVisibility(View.VISIBLE); 
    } 
    else 
    { 
     adView.setVisibility(View.GONE); 
    } 
} 
+0

Ответ в одной из этих ссылок говорит: "Пожалуйста, используйте getMapAsync()". Вы можете просмотреть последнюю документацию по картам Google, чтобы выявить различия в вашей реализации. –

+0

Возможный дубликат [Заменить getMap с помощью getMapAsync] (http://stackoverflow.com/questions/31371865/replace-getmap-with-getmapasync) –

ответ

0

Не отвергни MapView к GoogleMap, вот что вы должны сделать:

private GoogleMap mGoogleMap; 

OnCreate метод:

mMapView = (MapView) view.findViewById(R.id.mapview); 
mMapView.onCreate(savedInstanceState); 
mMapView.onResume(); 
mMapView.getMapAsync(this); 

OnMapReadyCallback Реализовать:

@Override 
public void onMapReady(GoogleMap googleMap) { 
mGoogleMap = googleMap; 
if (mGoogleMap != null) { 
    // Add your functions to GoogleMap 
} 
} 
+0

Должно вы явно вызываете методы жизненного цикла MapView? –

+0

Не уверен. Но чтобы избежать NPE, как в http://stackoverflow.com/questions/13812988/android-maps-v2-mapview-inside-custom-fragment-npe, я думаю, что вам нужно. –

+0

Я предполагаю, что я всегда видел используемый SupportMapFragment. Возможно, это связано с тем, что соответственно –