2016-12-08 2 views
0

Ich hatte ein altes Android-Projekt, das ich zurückgelassen hatte, und ich habe beschlossen, es abzuholen. Aber ich bekomme die "Kann Methode getMap() nicht auflösen" Fehler. Ich habe versucht, was passiert, here, here und here, aber ich bin sowieso stecken geblieben. Ich weiß, ich sollte getMapAsync verwenden, aber ich denke, dass Im das mit MapViewDie Methode getMap() kann in Google Maps 10.0.1 nicht aufgelöst werden.

nicht implementieren kann Ich denke, vielleicht ist es, weil ich MapView und nicht SupportMapFragment. Ich habe versucht, das auch zu ändern, aber ich bin auf dem Weg gescheitert.

Hier sind er Abhängigkeiten Ich möchte mit verwenden, oder besser gesagt IM:

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 

ich ein paar Methoden, die gekennzeichnet werden, wie im der getMap() verwendet, mehr als einmal, aber der Fehler ist hier gekennzeichnet:

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

die MapView in der folgenden angezeigt:

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

im bekommen der folgende Fehler:

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) 

Dies ist die erste Funktion von 4, die das Objekt GoogleMap wurden unter Verwendung von:

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

Die Antwort in einen dieser Links sagt: "Bitte benutzen Sie getMapAsync()". Möglicherweise möchten Sie die neueste Google Maps-Dokumentation scannen, um Unterschiede in Ihrer Implementierung zu erkennen. –

+0

Mögliches Duplikat von [getMap mit getMapAsync ersetzen] (http://stackoverflow.com/questions/31371865/replace-getmap-with-getmapasync) –

Antwort

0

Sie hier nicht MapView-GoogleMap werfen, ist das, was Sie tun sollten:

private GoogleMap mGoogleMap; 

OnCreate Methode:

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

OnMapReadyCallback Implement:

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

Sollte Sie rufen explizit MapView Lifecycle-Methoden auf? –

+0

Nicht sicher. Aber um NPE zu vermeiden, wie in http://stackoverflow.com/questions/13812988/android-maps-v2-mapview-inside-custom-fragment-npe, denke ich, dass Sie sollten. –

+0

Ich denke, ich habe immer nur das verwendete SupportMapFragment gesehen. Das behandelt wahrscheinlich das entsprechend –

Verwandte Themen