web-dev-qa-db-fra.com

Erreur "IBitmapDescriptorFactory n'est pas initialisée"

J'essaie d'obtenir un marqueur avec une icône personnalisée dans l'API v2 de Google Maps Android. Je viens de changer l'un des exemples fournis par Google. J'ai ajouté .icon(BitmapDescriptorFactory.fromResource(R.drawable.arrow)) à RawMapViewDemoActivity dans la méthode 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)));
}

Mais je reçois toujours un "IBitmapDescriptorFactory n'est pas initialisé".

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

Dans BitmapDescriptorFactory il dit:

Avant d'utiliser des méthodes de cette classe, vous devez effectuer l'une des opérations suivantes pour vous assurer que cette classe est initialisée:

  • Attendez que GoogleMap devienne disponible à partir d'un MapFragment ou MapView que vous avez ajouté à votre application. Vous pouvez vérifier que GoogleMap est disponible en appelant la méthode getMap () et en vérifiant que l'objet renvoyé n'est pas null.

  • Appelez MapsInitializer.initialize (Context). Tant qu'une exception com.google.Android.gms.common.GooglePlayServicesNotAvailableException GooglePlayServicesNotAvailableException n'est pas levée, cette classe est correctement initialisée.

J'ai fait le premier, mais j'obtiens toujours cette erreur. Aucune suggestion?

57
Kris

Appelez MapsInitializer.initialize(getApplicationContext()) dans la onCreate()

96
Greeny

Appelez le suivant dans onCreate()

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

Déplacez votre code pour qu'il s'appelle 'onMapReady ()', un rappel fourni par l'API GoogleMaps.

Ça va marcher!

15
Charlie

Cela m'est arrivé et, finalement, ce que j'ai pu trouver, c'est que les services de Google Play n'ont pas été installés. Donc installé et l'application ne s'est pas écrasé. Donc, on peut peut-être mettre un dialogue et un dialogue le disant dans le bloc de saisie.

1
Shreyas Kavathekar

Voir Marqueur personnalisé dans Google Maps sous Android avec icône de ressource vectorielle .

Dans mon cas, j'avais des marqueurs sur Google Maps. Mais sur l’émulateur API 19, il existe un problème avec Google Play Services. Donc, cette erreur est trompeuse, Google Play Services a essayé de créer BitmapDescriptor, mais n'a pas pu.

Vous devriez créer des marqueurs dans onMapReady(), y déplacer également tout autre code, en travaillant avec Google Maps.

Si vous ne parvenez pas à afficher Google Maps sur Android 4, vous devriez peut-être rétrograder une bibliothèque de 16.1.0 à 16.0.0, voir https://stackoverflow.com/a/54772374/2914140 . Mais si vous le faites, vous obtiendrez un crash sur Androif 9, voir Google Maps se bloquant sur Android Pie .

0
CoolMind