Ошибка "IBitmapDescriptorFactory не инициализирован"


Я пытаюсь получить маркер с пользовательским значком в Google Maps Android API v2. Я только что изменил один из примеров, которые предоставляет Google. Я добавил .icon(BitmapDescriptorFactory.fromResource(R.drawable.arrow)) к RawMapViewDemoActivity в методе 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)));
}

но я всегда получаю "IBitmapDescriptorFactory не инициализируется".

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.access0(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

на BitmapDescriptorFactory он говорит:

перед использованием любых методов из этого класса необходимо выполнить одно из следующих действий убедитесь, что этот класс инициализируется:

  • подождите, пока карта GoogleMap станет доступной из MapFragment или MapView, которые вы добавили в свое приложение. Вы можете проверить доступность карты GoogleMap, вызвав метод getMap () и проверив, что возвращаемый объект не является нулевым.

  • Вызов MapsInitializer.инициализация(контекст). До тех пор, пока ком.гуглить.андроид.СБМ.общий.GooglePlayServicesNotAvailableException GooglePlayServicesNotAvailableException не выбрасывается, этот класс будет правильно инициализирован.

Я сделал первый, но все еще получаю эту ошибку. Есть предложения?

5 56

5 ответов:

вызов MapsInitializer.initialize(getApplicationContext()) на onCreate()

вызов следующего в onCreate()

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

переместите код, который будет называться " onMapReady ()", обратный вызов, предоставляемый API GoogleMaps.

Он будет работать!

Это случилось со мной, и, наконец, в моем случае, что я мог найти, были не установлены сервисы google play. Поэтому установил их и приложение не разбился. Так что, возможно, можно попробовать и диалог, говорящий об этом в блоке catch.

  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 {}