Parcelables 不支持默认值。 Android 导航深层链接参数
Posted
技术标签:
【中文标题】Parcelables 不支持默认值。 Android 导航深层链接参数【英文标题】:Parcelables don't support default values. Android navigation deeplink argument 【发布时间】:2020-05-15 10:48:48 【问题描述】:在执行传参解决方案的过程中,在模块之间导航时,遇到了一个序列化错误。据我所知,深度链接接受自定义参数类型,即 Parcelables 或 Serializable。
我正在使用最新版本的导航 2.2.0
错误信息:
java.lang.UnsupportedOperationException: Parcelables 不支持默认值。
是我做错了什么还是仍在开发中?
这是一个简短的例子:
<fragment
android:id="@+id/sampleFragment"
android:name="com.testapp.app.samples.navigation.SampleFragment"
android:label="SampleFragment">
<argument
android:name="Args"
app:argType="com.testapp.navigation.SampleArgs" />
<deepLink app:uri="app://app/samples/navigation/SampleFragment?Args=Args"/>
</fragment>
@Parcelize
@Keep data class SampleArgs(
val text: String
) : NavArgs, Parcelable
val x = SampleArgs("TEST")
val uri = Uri.parse("app://app/samples/navigation/SampleFragment?Args=$x")
navController.navigate(uri)
我在这里找到了类似的东西Android Parcelable don't support default values App Crash
这是我在堆栈上的第一篇文章,所以请温柔:)
编辑
这里是答案:
https://issuetracker.google.com/issues/148523779
【问题讨论】:
【参考方案1】:Parcelables 当前不支持默认值,因此您需要将对象作为字符串值传递。是的,这是一种解决方法。因此,我们可以将该对象转换为 JSON(字符串)并通过导航传递,然后将该 JSON 解析回目的地的对象,而不是将对象本身作为 Parcelize 对象传递。您可以使用GSON
进行对象到json-string 的转换。
【讨论】:
以上是关于Parcelables 不支持默认值。 Android 导航深层链接参数的主要内容,如果未能解决你的问题,请参考以下文章
Android Studio教程05-Parcelables和Bundles.md