Parcelables 不支持默认值。Android 导航深层链接参数

Nik*_*ron 15 navigation android parcelable deeplink android-safe-args

在实现传参方案的过程中,在模块间的导航中,遇到了序列化错误。据我所知,Deeplinks 接受自定义参数类型,即 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>
Run Code Online (Sandbox Code Playgroud)
@Parcelize
@Keep data class SampleArgs(
    val text: String
) : NavArgs, Parcelable
Run Code Online (Sandbox Code Playgroud)
val x = SampleArgs("TEST")
val uri = Uri.parse("app://app/samples/navigation/SampleFragment?Args=$x")
navController.navigate(uri)
Run Code Online (Sandbox Code Playgroud)

我在这里发现了类似的东西Android Parcelable 不支持默认值 App Crash

这是我在堆栈上的第一篇文章,所以请保持温柔:)

编辑

这是答案:

https://issuetracker.google.com/issues/148523779

abh*_*bhi 9

Parcelables 目前不支持默认值,因此您需要将对象作为字符串值传递。是的,这是一个解决方法。因此,我们可以将该对象转换为 JSON(字符串)并通过导航传递,然后将该 JSON 解析回目标处的对象,而不是将对象本身作为 Parcelize 对象传递。您可以用于GSON对象到 json 字符串的转换。