androidx.navigation 库和斜杠问题

问题描述 投票:0回答:1

问题描述:

当我尝试创建自定义导航类型并导航到导航图中的某个目的地时,出现错误,指出在图表中找不到该某个目的地。经过检查,地址列表中的某些项目具有街道名称,例如Green Street 1,这不会引起任何问题,但街道名称为Green Street 1/3的地址会引起任何问题。我想它可能与 androidx.navigation 库本身有关,因为在幕后,该库中的导航与 URL 一起使用,其中变量之间包含斜杠。

实际结果:

导航到带有斜杠“/”符号的地址后应用程序崩溃

预期结果:

无论是否有“/”符号,导航到地址后应用程序都不会崩溃。

代码:

@Serializable
data class Address(
    val city: String?,
    val companyId: Int,
    val country: String?,
    val gpsCoordinates: String?,
    val id: Int,
    val pointName: String? = null,
    val pointType: String,
    val postalCode: String?,
    val street: String?
)


val AddressType = object : NavType<Address?>(isNullableAllowed = true) {
    override fun get(bundle: Bundle, key: String): Address? {
        return bundle.getString(key)?.takeIf { it != "null" }
            ?.let { Json.decodeFromString<Address>(it) }
    }

    override fun parseValue(value: String): Address? {
        return if (value == "null") null else Json.decodeFromString<Address>(value)
    }

    override fun serializeAsValue(value: Address?): String {
        return Json.encodeToString(value)
    }

    override fun put(bundle: Bundle, key: String, value: Address?) {
        bundle.putString(key, Json.encodeToString(value))
    }
}

在我的导航图中,一切看起来都是正确的,因为我能够导航到目的地,而无需街道名称包含“/”符号。

android kotlin android-navigation kotlinx.serialization
1个回答
0
投票

提供自定义类型文档中所述,您需要

Uri.encode
中的
Json.encodeToString(value)
serializeAsValue

	
© www.soinside.com 2019 - 2024. All rights reserved.