簡體   English   中英

Android Mapbox 庫資源錯誤

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM