Android 在空对象引用上发生 'boolean com.mapbox.mapboxsdk.maps.Style.isFullyLoaded()' 崩溃,

标签 android maps mapbox mapbox-android

您好,我正在尝试使用 MapBox 进行导航并遇到这样的崩溃

2019-01-20 19:00:16.331 32005-32005/com.example.mapboxtest E/Mbgl-MapChangeReceiver: Exception in onDidFinishLoadingStyle
android.content.res.Resources$NotFoundException: Resource ID #0xffffffff
    at android.content.res.ResourcesImpl.getValueForDensity(ResourcesImpl.java:225)
    at android.content.res.Resources.getDrawableForDensity(Resources.java:887)
    at android.content.res.Resources.getDrawable(Resources.java:827)
    at android.content.Context.getDrawable(Context.java:626)
    at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:463)
    at com.mapbox.mapboxsdk.location.Utils.getDrawable(Utils.java:75)
    at com.mapbox.mapboxsdk.location.LayerBitmapProvider.generateBitmap(LayerBitmapProvider.java:26)
    at com.mapbox.mapboxsdk.location.LocationLayerController.styleForeground(LocationLayerController.java:303)
    at com.mapbox.mapboxsdk.location.LocationLayerController.applyStyle(LocationLayerController.java:109)
    at com.mapbox.mapboxsdk.location.LocationLayerController.initializeComponents(LocationLayerController.java:92)
    at com.mapbox.mapboxsdk.location.LocationLayerController.<init>(LocationLayerController.java:84)
    at com.mapbox.mapboxsdk.location.LocationComponent.initialize(LocationComponent.java:991)
    at com.mapbox.mapboxsdk.location.LocationComponent.activateLocationComponent(LocationComponent.java:292)
    at com.mapbox.services.android.navigation.ui.v5.map.NavigationMapboxMap.initializeLocationComponent(NavigationMapboxMap.java:549)
    at com.mapbox.services.android.navigation.ui.v5.map.NavigationMapboxMap.<init>(NavigationMapboxMap.java:80)
    at com.example.mapboxtest.MainActivity$1.onStyleLoaded(MainActivity.java:45)
    at com.mapbox.mapboxsdk.maps.MapboxMap.notifyStyleLoaded(MapboxMap.java:835)
    at com.mapbox.mapboxsdk.maps.MapboxMap.onFinishLoadingStyle(MapboxMap.java:202)
    at com.mapbox.mapboxsdk.maps.MapView$MapCallback.onDidFinishLoadingStyle(MapView.java:1164)
    at com.mapbox.mapboxsdk.maps.MapChangeReceiver.onDidFinishLoadingStyle(MapChangeReceiver.java:194)
    at com.mapbox.mapboxsdk.maps.NativeMapView.onDidFinishLoadingStyle(NativeMapView.java:979)
    at android.os.MessageQueue.nativePollOnce(Native Method)
    at android.os.MessageQueue.next(MessageQueue.java:326)
    at android.os.Looper.loop(Looper.java:160)
    at android.app.ActivityThread.main(ActivityThread.java:6892)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:537)

这些是我现在使用的依赖

 // MAP BOX
implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:7.0.1'
implementation 'com.mapbox.mapboxsdk:mapbox-android-navigation-ui:0.27.0'

这就是我崩溃的地方

     @Override
    public void onMapReady(@NonNull MapboxMap mapboxMap) {
        mMapboxMap = mapboxMap;
        mapboxMap.setStyle(new Style.Builder().fromUrl(getString(R.string.navigation_guidance)), new Style.OnStyleLoaded() {
            @Override
            public void onStyleLoaded(@NonNull Style style) {
//                enableLocationComponent();
                if (style.isFullyLoaded()) {
                    navigationMap = new NavigationMapboxMap(mapView, mMapboxMap);
//
//                // For Location updates
//                initializeLocationEngine();
//
//                // For navigation logic / processing
//        initializeNavigation(mMapboxMap);
                    navigationMap.updateCameraTrackingMode(NavigationCamera.NAVIGATION_TRACKING_MODE_NONE);
                }
            }
        });
    }

这一行导致了问题

navigationMap = new NavigationMapboxMap(mapView, mMapboxMap);

我检查了这个链接 https://github.com/mapbox/mapbox-gl-native/wiki/Android-6.x-to-7.x-migration-guide

然后发现了这样的东西

In order to avoid java.lang.NullPointerException: Attempt to invoke virtual method 'boolean com.mapbox.mapboxsdk.maps.Style.isFullyLoaded()' on a null object reference, the provided style parameter in the LocationComponent#activate method has to be @NonNull and fully loaded. The best way is to pass the style provided in the OnStyleLoaded callback.

但仍然没有运气。

最佳答案

我遇到了同样的问题并尝试了所有解决方案。我更新到最新的 mapbox sdk 8.4.0,并遵循了 ComponentNavigationActivity#onMapReady,但仍然没有运气。

然后我发现我们需要放:

<item name="navigationViewLocationLayerStyle">@style/NavigationLocationLayerStyle</item>

在自定义指令 View 样式中并将其应用到 onCreate() 中,如下所示:

setTheme(R.style.customInstructionView);

这解决了问题。希望对您有所帮助!

关于Android 在空对象引用上发生 'boolean com.mapbox.mapboxsdk.maps.Style.isFullyLoaded()' 崩溃,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54277903/

相关文章:

ios - 使用 MBTiles 在离线 map 中自动将 RMMarker 调整为用户的当前位置

java - 如果用户尚未登录,如何为 getDisplayName() 写入 if 语句?

java - 如何使用在该项目内创建的按钮删除 ListView 项目。

ios - 如何获取 iOS5 map 中 2 个引脚之间的逐向方向?

maps - 使用 openlayers 3 加载 osm 文件

JQuery 将鼠标悬停在 map 位置上会更改位置大小

android - 更新 Android SDK 时出错

android - 加载位图时出现内存不足错误

android - Mapbox Navigation SDK,将航路点添加到 NavigationRoute.builder() 时出现问题

android - 如何在 Mapbox map 上的 2 点之间绘制直线?