Fehler „IBitmapDescriptorFactory ist nicht initialisiert“.

Lesezeit: 6 Minuten

Benutzer-Avatar
Kris

Ich versuche, eine Markierung mit einem benutzerdefinierten Symbol in Google Maps Android API v2 zu erhalten. Ich habe gerade eines der von Google bereitgestellten Beispiele geändert. Ich fügte hinzu .icon(BitmapDescriptorFactory.fromResource(R.drawable.arrow)) zu RawMapViewDemoActivity in der Methode setUpMap().

private void setUpMapIfNeeded() {
    if (mMap == null) {
        mMap = ((MapView) findViewById(R.id.map)).getMap();
        if (mMap != null) {
            setUpMap();
        }
    }
}

private void setUpMap() {
    mMap.addMarker(new MarkerOptions()
        .position(new LatLng(0, 0))
        .title("Marker")
        .icon(BitmapDescriptorFactory.fromResource(R.drawable.arrow)));
}

Aber ich bekomme immer ein “IBitmapDescriptorFactory ist nicht initialisiert”.

12-18 15:40:54.356: E/AndroidRuntime(12591): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.mapdemo/com.example.mapdemo.RawMapViewDemoActivity}: java.lang.NullPointerException: IBitmapDescriptorFactory is not initialized
12-18 15:40:54.356: E/AndroidRuntime(12591):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
12-18 15:40:54.356: E/AndroidRuntime(12591):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
12-18 15:40:54.356: E/AndroidRuntime(12591):    at android.app.ActivityThread.access$600(ActivityThread.java:130)
12-18 15:40:54.356: E/AndroidRuntime(12591):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
12-18 15:40:54.356: E/AndroidRuntime(12591):    at android.os.Handler.dispatchMessage(Handler.java:99)
12-18 15:40:54.356: E/AndroidRuntime(12591):    at android.os.Looper.loop(Looper.java:137)
12-18 15:40:54.356: E/AndroidRuntime(12591):    at android.app.ActivityThread.main(ActivityThread.java:4745)
12-18 15:40:54.356: E/AndroidRuntime(12591):    at java.lang.reflect.Method.invokeNative(Native Method)
12-18 15:40:54.356: E/AndroidRuntime(12591):    at java.lang.reflect.Method.invoke(Method.java:511)
12-18 15:40:54.356: E/AndroidRuntime(12591):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
12-18 15:40:54.356: E/AndroidRuntime(12591):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
12-18 15:40:54.356: E/AndroidRuntime(12591):    at dalvik.system.NativeStart.main(Native Method)
12-18 15:40:54.356: E/AndroidRuntime(12591): Caused by: java.lang.NullPointerException: IBitmapDescriptorFactory is not initialized
12-18 15:40:54.356: E/AndroidRuntime(12591):    at com.google.android.gms.internal.at.a(Unknown Source)
12-18 15:40:54.356: E/AndroidRuntime(12591):    at com.google.android.gms.maps.model.BitmapDescriptorFactory.d(Unknown Source)
12-18 15:40:54.356: E/AndroidRuntime(12591):    at com.google.android.gms.maps.model.BitmapDescriptorFactory.fromResource(Unknown Source)
12-18 15:40:54.356: E/AndroidRuntime(12591):    at com.example.mapdemo.RawMapViewDemoActivity.setUpMap(RawMapViewDemoActivity.java:67)
12-18 15:40:54.356: E/AndroidRuntime(12591):    at com.example.mapdemo.RawMapViewDemoActivity.setUpMapIfNeeded(RawMapViewDemoActivity.java:58)
12-18 15:40:54.356: E/AndroidRuntime(12591):    at com.example.mapdemo.RawMapViewDemoActivity.onCreate(RawMapViewDemoActivity.java:43)
12-18 15:40:54.356: E/AndroidRuntime(12591):    at android.app.Activity.performCreate(Activity.java:5008)
12-18 15:40:54.356: E/AndroidRuntime(12591):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
12-18 15:40:54.356: E/AndroidRuntime(12591):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
12-18 15:40:54.356: E/AndroidRuntime(12591):    ... 11 more

Im BitmapDescriptorFactory es sagt:

Bevor Sie Methoden dieser Klasse verwenden, müssen Sie einen der folgenden Schritte ausführen, um sicherzustellen, dass diese Klasse initialisiert wird:

  • Warten Sie, bis eine GoogleMap von einem MapFragment oder MapView verfügbar wird, das Sie Ihrer Anwendung hinzugefügt haben. Sie können überprüfen, ob GoogleMap verfügbar ist, indem Sie die Methode getMap() aufrufen und überprüfen, ob das zurückgegebene Objekt nicht null ist.

  • Rufen Sie MapsInitializer.initialize(Context) auf. Solange keine com.google.android.gms.common.GooglePlayServicesNotAvailableException GooglePlayServicesNotAvailableException ausgelöst wird, wird diese Klasse korrekt initialisiert.

Ich habe den ersten gemacht, bekomme aber immer noch diesen Fehler. Irgendwelche Vorschläge?

  • Ich schlage vor, ein Beispielprojekt zu erstellen, das den Fehler reproduzieren kann, und seinen Quellcode irgendwo zu posten. Das fühlt sich an wie ein Bug-In fromResource()aber wir brauchen einen reproduzierbaren Testfall.

    – CommonsWare

    18. Dezember 2012 um 17:21 Uhr

  • Berufung MapInitializer.initialize() macht den Trick für mich.

    – Asche

    18. Dezember 2012 um 22:43 Uhr

  • Ich stehe vor dem gleichen Problem..java.lang.NullPointerException: IBitmapDescriptorFactory ist nicht initialisiert

    – Sanjay

    19. Dezember 2012 um 9:58 Uhr


  • meine Beispiel-Java-Klasse: –pastebin.com/Mh7R0WQV

    – Sanjay

    19. Dezember 2012 um 10:05 Uhr

  • Der gleiche Fehler “IBitmapDescriptorFactory ist nicht initialisiert” tritt auf, wenn ich die Methode defaultMarker() anstelle von fromResource() verwende. .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)

    – Kris

    19. Dezember 2012 um 12:02 Uhr


Benutzer-Avatar
Grünlich

Anruf MapsInitializer.initialize(getApplicationContext()) in dem onCreate()

  • Dies ist eine gute Antwort, aber es wäre großartig herauszufinden, warum das überhaupt passiert, es ist nicht im Karten-Tutorial AFAIK dokumentiert

    – Lawine

    30. Januar 2014 um 7:46 Uhr

  • Meine Anwendung stürzt mit dieser Ausnahme auf einigen Telefonen immer noch ab, obwohl ich diese Codezeile hinzugefügt habe. Ich habe festgestellt, dass es möglicherweise etwas damit zu tun hat, dass der GooglePlay Store nicht installiert oder auf dem neuesten Stand ist. Gibt es eine Möglichkeit herauszufinden, ob Maps verfügbar ist?

    – X.X_Mass_Developer

    31. März 2014 um 11:00 Uhr

  • Ich versuche dies, aber derselbe Fehler, nichts ändert sich im Fehler

    – Fauler Löwe

    30. August 2014 um 6:19 Uhr

  • Die richtige Antwort kommt von @Charlie, Sie sollten Ihren Code so verschieben, dass er bei ‚onMapReady()‘ aufgerufen wird.

    – Mario Augusto

    16. Dezember 2018 um 23:51 Uhr

  • Obwohl dies eine Lösung ist, ist sie nicht gut, da sie nicht auf allen Android-Geräten funktioniert. Die beste Lösung besteht darin, diese Klasse aufzurufen/zu verwenden, nachdem Ihre Karte geladen und bereit ist. Sobald die Karte geladen und bereit ist, wird ein Rückruf über die empfangen onMapReady() Methode, wie von @Charlie in einer Antwort unten erwähnt.

    – Eduard Quijote

    27. Februar 2019 um 14:00 Uhr

Rufen Sie folgende an onCreate()

try {
        MapsInitializer.initialize(getApplicationContext());
    } catch (GooglePlayServicesNotAvailableException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

  • Ich erhalte eine Meldung, die Ausnahme wird nie in diesem Try-Catch-Block geworfen?

    – Apqu

    7. Januar 2016 um 15:46 Uhr

Benutzer-Avatar
Charlie

Bewegen Sie Ihren Code, um angerufen zu werden onMapReady()ein Callback, der von der GoogleMaps-API bereitgestellt wird.

  • Es funktionierte (als ich MapsInitializer in onCreate auslöste) auf Galaxy s3, als ich onCreate platzierte und in s5 (und Emulator) fehlschlug. Auf onMapReady verschoben hat geholfen, Prost!

    – Jaroslaw Hawrylowitsch

    4. Dezember 2016 um 17:05 Uhr


  • Das ist eigentlich die richtige Antwort. Andere Lösungen funktionieren nicht auf allen Handys.

    – Rakesh Yadav

    8. August 2017 um 4:27 Uhr

Dies ist mir passiert und schließlich konnte ich in meinem Fall feststellen, dass die Google Play-Dienste nicht installiert waren. Also installiert und die App ist nicht abgestürzt. So kann man try und einen Dialog, der dies sagt, in den catch-Block einfügen.

Benutzer-Avatar
CoolMind

Siehe Benutzerdefinierte Markierung in Google Maps in Android mit Vektor-Asset-Symbol.

In meinem Fall hatte ich Markierungen über Google Maps. Aber auf dem API 19-Emulator gibt es ein Problem mit Google Play Services. Dieser Fehler ist also irreführend, Google Play Services versucht zu erstellen BitmapDescriptorkonnte aber nicht.

Sie sollten Markierungen in erstellen onMapReady()verschieben Sie auch dort jeden anderen Code, mit dem Sie arbeiten Google Maps.

Wenn Sie Probleme mit der Anzeige von Google Maps auf Android 4 haben, sollten Sie vielleicht eine Bibliothek von 16.1.0 auf 16.0.0 herunterstufen, siehe https://stackoverflow.com/a/54772374/2914140. Aber wenn Sie dies tun, erhalten Sie einen Absturz auf Androif 9, siehe Google Maps stürzt auf Android Pie ab.

Benutzer-Avatar
Mubashir Murtaza

Ok, hier ist eine Lösung, die für mich funktioniert, ich habe sie zufällig gefunden! aktualisieren Sie einfach Ihr Gradle auf com.android.tools.build:gradle:3.6.2

    dependencies {
    classpath 'com.android.tools.build:gradle:3.6.2'


    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}

Benutzer-Avatar
Slava Vedenin

  GoogleApiAvailability googleApiAvailability=GoogleApiAvailability.getInstance();

  int status=googleApiAvailability.isGooglePlayServicesAvailable(getActivity());



  if (status != ConnectionResult.SUCCESS) {
        int requestCode = 10;
        Dialog dialog = googleApiAvailability.getErrorDialog(getActivity(),status,requestCode);
        dialog.show();
    }else {}

1215730cookie-checkFehler „IBitmapDescriptorFactory ist nicht initialisiert“.

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy