[英]Android Mapbox library error with resource
我在使用 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)
調試庫,我按照流程直到這個 class: MapRouteLine.kt
在這種方法中,我有以下值:
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
有了這個值,在行
context.resources.getStringArray(resourceId)
拋出異常
android.content.res.Resources$NotFoundException: String array resource ID #0x0
我認為這是一個內部庫問題,但有沒有辦法解決這個問題?
好吧,我找到了解決這個問題的方法。
首先,在為 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>
字符串值也是默認值。
<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>
最后,這是我找到的唯一解決方案,設置默認值而不是允許庫從其源中獲取它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.