“IBitmapDescriptorFactory未初始化”错误(“IBitmapDescripto

2019-08-04 06:33发布

我试图让一个标记与谷歌地图API的Android V2的自定义图标。 我只是改变了谷歌提供了一个例子。 我加入.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.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

在BitmapDescriptorFactory它说:

使用从这个类的任何方法之前,必须执行下列操作之一,以确保该类被初始化:

  • 等待的GoogleMap变得可用,您已经添加到您的应用程序MapFragment或MapView的。 您可以验证GoogleMap的可调用的GetMap()方法,并检查返回的对象不为空。

  • 呼叫MapsInitializer.initialize(上下文)。 只要com.google.android.gms.common.GooglePlayServicesNotAvailableException GooglePlayServicesNotAvailableException没有抛出,这个类将被正确初始化。

我做的第一个,但仍然得到这个错误。 有什么建议?

Answer 1:

呼叫MapsInitializer.initialize(getApplicationContext())onCreate()



Answer 2:

调用下面onCreate()

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


Answer 3:

将你的代码被称为“onMapReady()”,一个由谷歌地图API提供的回调。

它的工作!



Answer 4:

这发生在我身上,终于在我来说,我能找到的都没有安装谷歌播放服务。 所以他们安装和app没有崩溃。 所以可能是一个可以把尝试和一个对话框,在catch块这样说。



Answer 5:

见在谷歌地图自定义标记与矢量资源图标的Android 。

在我来说,我有超过谷歌地图标记。 但在API 19模拟器有一个问题Google Play Services 。 所以,这个错误是一种误导, Google Play Services试图创建BitmapDescriptor ,但不能。

您应该创建在标记onMapReady()也搬到那里任何其他代码,有工作Google Maps

如果你有显示在安卓4.0谷歌地图的问题,也许你应该降级从16.1.0库到16.0.0,看https://stackoverflow.com/a/54772374/2914140 。 但是,如果你这样做,你会得到Androif 9崩溃,看到谷歌地图崩溃在Android馅饼 。



Answer 6:

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


文章来源: “IBitmapDescriptorFactory is not initialized” error