简体   繁体   English

Android Mapbox 库资源错误

[英]Android Mapbox library error with resource

I´m having this error with Mapbox library:我在使用 Mapbox 库时遇到此错误:

2020-12-10 09:27:18.821 31787-31787/com.gigigo.wible.quality E/MapRouteLine$MapRouteLineSupport: android.content.res.Resources$NotFoundException: String array resource ID #0x0
    at android.content.res.Resources.getStringArray(Resources.java:612)
    at com.mapbox.navigation.ui.route.MapRouteLine$MapRouteLineSupport.getStyledFloatArray(MapRouteLine.kt:1027)
    at com.mapbox.navigation.ui.route.MapRouteLine$MapRouteLineSupport.getRouteLineScalingValues(MapRouteLine.kt:975)
    at com.mapbox.navigation.ui.route.MapboxRouteLayerProviderFactory$getLayerProvider$1.<init>(MapboxRouteLayerProviderFactory.kt:45)
    at com.mapbox.navigation.ui.route.MapboxRouteLayerProviderFactory.getLayerProvider(MapboxRouteLayerProviderFactory.kt:24)
    at com.mapbox.navigation.ui.route.NavigationMapRoute.buildMapRouteLine(NavigationMapRoute.java:361)
    at com.mapbox.navigation.ui.route.NavigationMapRoute.<init>(NavigationMapRoute.java:108)
    at com.mapbox.navigation.ui.route.NavigationMapRoute.<init>(NavigationMapRoute.java:50)
    at com.mapbox.navigation.ui.route.NavigationMapRoute$Builder.build(NavigationMapRoute.java:573)
    at com.repsol.wible.presentation.main.map.MapComponent.createNavigationMapRoute(MapComponent.kt:225)
    at com.repsol.wible.presentation.main.map.MapComponent.access$createNavigationMapRoute(MapComponent.kt:76)
    at com.repsol.wible.presentation.main.map.MapComponent$showRoute$1$onResponse$1.onStyleLoaded(MapComponent.kt:187)
    at com.mapbox.mapboxsdk.maps.MapboxMap.getStyle(MapboxMap.java:121)
    at com.repsol.wible.presentation.main.map.MapComponent$showRoute$1.onResponse(MapComponent.kt:183)
    at com.mapbox.api.directions.v5.MapboxDirections$1.onResponse(MapboxDirections.java:186)
    at retrofit2.DefaultCallAdapterFactory$ExecutorCallbackCall$1.lambda$onResponse$0$DefaultCallAdapterFactory$ExecutorCallbackCall$1(DefaultCallAdapterFactory.java:81)
    at retrofit2.-$$Lambda$DefaultCallAdapterFactory$ExecutorCallbackCall$1$3wC8FyV4pyjrzrYL5U0mlYiviZw.run(Unknown Source:6)
    at android.os.Handler.handleCallback(Handler.java:883)
    at android.os.Handler.dispatchMessage(Handler.java:100)
    at android.os.Looper.loop(Looper.java:228)
    at android.app.ActivityThread.main(ActivityThread.java:7884)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:981)

Debugging the library, I followed the flow until this class: MapRouteLine.kt调试库,我按照流程直到这个 class: MapRouteLine.kt

In this method I have the following values:在这种方法中,我有以下值:

fun getStyledFloatArray(
        arrayResourceId: Int,
        context: Context,
        styleRes: Int,
        attributes: IntArray
    ): List<Float> {
        return try {
            val typedArray = context.obtainStyledAttributes(styleRes, attributes)
            val resourceId = typedArray.getResourceId(arrayResourceId, 0).also {
                typedArray.recycle()
            }
            context.resources.getStringArray(resourceId).mapNotNull {
                it?.toFloatOrNull()
            }
        } catch (ex: Exception) {
            Timber.e(ex)
            listOf()
        }
    }



 arrayResourceId = 19
 resourceId = 0

With this values, in the line有了这个值,在行

context.resources.getStringArray(resourceId)

throws the exception抛出异常

android.content.res.Resources$NotFoundException: String array resource ID #0x0

I assume that it is an internal library issue, but is there any way to fix this?我认为这是一个内部库问题,但有没有办法解决这个问题?

Well, I found the solution to this issue.好吧,我找到了解决这个问题的方法。

First of all, in the customed style created for the map library, I had to set the following default values because it was not taken these from library source.首先,在为 map 库创建的自定义样式中,我必须设置以下默认值,因为它不是从库源中获取的。

    <item name="routeLineScaleStops">@array/routeLineScaleStopsArray</item>
    <item name="routeLineScaleMultipliers">@array/routeLineScaleMultiplierArray</item>
    <item name="routeLineScales">@array/routeLineScalesArray</item>
    <item name="routeLineTrafficScaleStops">@array/routeLineTrafficScaleStopsArray</item>
    <item name="routeLineTrafficScaleMultipliers">@array/routeLineTrafficScaleMultiplierArray</item>
    <item name="routeLineTrafficScales">@array/routeLineTrafficScalesArray</item>
    <item name="routeLineCasingScaleStops">@array/routeLineCasingScaleStopsArray</item>
    <item name="routeLineCasingScaleMultipliers">@array/routeLineCasingScaleMultiplierArray</item>
    <item name="routeLineCasingScales">@array/routeLineCasingScalesArray</item>

The strings values are the default as well.字符串值也是默认值。

<string-array name="routeLineScaleStopsArray">
    <item>4</item>
    <item>10</item>
    <item>13</item>
    <item>16</item>
    <item>19</item>
    <item>22</item>
</string-array>

<string-array name="routeLineScaleMultiplierArray">
    <item>3</item>
    <item>4</item>
    <item>6</item>
    <item>10</item>
    <item>14</item>
    <item>18</item>
</string-array>

<string-array name="routeLineScalesArray">
    <item>1</item>
    <item>1</item>
    <item>1</item>
    <item>1</item>
    <item>1</item>
    <item>1</item>
</string-array>

<string-array name="routeLineTrafficScaleStopsArray">
    <item>4</item>
    <item>10</item>
    <item>13</item>
    <item>16</item>
    <item>19</item>
    <item>22</item>
</string-array>

<string-array name="routeLineTrafficScaleMultiplierArray">
    <item>3</item>
    <item>4</item>
    <item>6</item>
    <item>10</item>
    <item>14</item>
    <item>18</item>
</string-array>

<string-array name="routeLineTrafficScalesArray">
    <item>1</item>
    <item>1</item>
    <item>1</item>
    <item>1</item>
    <item>1</item>
    <item>1</item>
</string-array>

<string-array name="routeLineCasingScaleStopsArray">
    <item>10</item>
    <item>14</item>
    <item>16.5</item>
    <item>19</item>
    <item>22</item>
</string-array>

<string-array name="routeLineCasingScaleMultiplierArray">
    <item>7</item>
    <item>10.5</item>
    <item>15.5</item>
    <item>24</item>
    <item>29</item>
</string-array>

<string-array name="routeLineCasingScalesArray">
    <item>1</item>
    <item>1</item>
    <item>1</item>
    <item>1</item>
    <item>1</item>
</string-array>

At the end, this is the only solution I found, set the default values instead allow library to take them from its source.最后,这是我找到的唯一解决方案,设置默认值而不是允许库从其源中获取它们。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM