[英]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.