2016-07-17 12 views
7

Ich habe eine GPS-App, die gut funktioniert auf meinem Handy. Ich sehe jedoch, dass es Leute gab, die eine Nullzeiger-Ausnahme in der Produktion hatten.Android kann keine Symbolmethode finden getMap()

SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); 

    // Getting GoogleMap object from the fragment 
    googleMap = fm.getMap(); 

    // Enabling MyLocation Layer of Google Map 
    googleMap.setMyLocationEnabled(true); 

    googleMap.setPadding(0, 0, 0, 90); 

Der Fehler Ich bin von der Produktion immer ist Verursacht durch:

java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.gms.maps.GoogleMap.setMyLocationEnabled(boolean)' on a null object reference 

So habe ich einige der Forschung und finden Sie heraus, dass getMap Methode wurde entfernt, und die Menschen empfehlen getMapAsync(this);

@Override 
public void onMapReady(GoogleMap googleMap) { 
    this.googleMap = googleMap; //which doesn't seem to work 
} 

Allerdings referenziere ich die Variable in vielen verschiedenen Methoden, und ich kann nicht den gesamten Code aufverschiebenMethode. Ich habe versucht, this.googleMap = googleMap innerhalb der onMapReady-Methode zu verwenden, aber ich bekomme immer noch Nullzeigerausnahmen, wenn ich versuche, die Variable zu referenzieren. Ich habe getMapAsync (this) in onCreated() definiert und dann versucht, auf das googleMap-Objekt in onResume() zuzugreifen und die Nullzeiger-Ausnahme zu erhalten. Gibt es eine Möglichkeit, das zu beheben? Vielen Dank.

+0

Können Sie die Layout-Datei zeigen? –

Antwort

2

Wie ich in this Antwort vorschlagen.

getMap() ist veraltet Verwendung getMapAsync() anstelle davon auf die folgende Weise.

Replace diese

googleMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.googleMap)).getMap(); 

mit diesem

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

, um weitere Informationen besuchen Sie diese link

+3

Der Rückgabetyp von getMapAsync (new OnMapReadyCallBack() {}) ist ungültig. – AnupamChugh

0

Sicherlich haben Sie nicht übereinstimmen das SupportMapFragment und MapFragment bedeutet, wenn Sie Klassenattribut

haben
class ="com.google.android.gms.maps.MapFragment" 

in Ihrem XML dann sollten Sie

MapFragment mapFragment = (MapFragment) getFragmentManager() .findFragmentById(R.id.map); 

ODER

Wenn Sie attr haben Klasse verwenden, wie

class="com.google.android.gms.maps.SupportMapFragment" 

dann können Sie wie zu tun, wie Sie tun.

6

Sie erhalten eine Nullzeigerausnahme, weil Sie versuchen, ein Google Map-Objekt zu verwenden, aber das Google Map-Objekt ist immer noch null, also müssen Sie diesem Schritt folgen. schreibt diesen Code in onCreate() -Methode

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

jetzt impleents Ihre Klasse mit public class Demo implements OnMapReadyCallback kurzum Sie benötigen onMapReady (Googlemap googleMap) MeTHOOD außer Kraft zu setzen. Sie können alle Aktionen nach dem Rückruf von onMapReady() ausführen.

@Override 
    public void onMapReady(GoogleMap googleMap) { 
     mMap = googleMap; 
// Enabling MyLocation Layer of Google Map 
googleMap.setMyLocationEnabled(true); 
    } 
+0

Ich habe das obige Objekt in onCreate() erstellt, aber als ich versuchte, das googleMap-Objekt in onResume() zu verwenden, erhalte ich immer noch die Null-Zeiger-Ausnahme. – Julia

+0

Sie erhalten in onResume() eine Nullzeigerausnahme, weil Ihre Map noch nicht bereit ist. – Alvi

1

ersetzen

googleMap = ((SupportMapFragment) getSupportFragmentManager() 
    .findFragmentById(R.id.googleMap)).getMap(); 

mit

googleMap = ((SupportMapFragment) getChildFragmentManager() 
    .findFragmentById(R.id.map)).getMapAsync((OnMapReadyCallback);this); 
Verwandte Themen