问题描述:
当我尝试创建自定义导航类型并导航到导航图中的某个目的地时,出现错误,指出在图表中找不到该某个目的地。经过检查,地址列表中的某些项目具有街道名称,例如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))
}
}
在我的导航图中,一切看起来都是正确的,因为我能够导航到目的地,而无需街道名称包含“/”符号。