我正在尝试将 safe-args 与 kotlin-multiplatform 类型一起使用,但是在尝试传递可序列化数据时,我在运行时不断遇到同样的问题:
引起:java.lang.IllegalArgumentException:org.kotlin.mpp.mobile.models.MyModel 不是 Serializable 或 Parcelable。
在我的nav_host.xml我有以下内容:
<fragment
android:id="@+id/aFragment"
android:name="com.corp.myapp.main.aFragment"
android:label="aFragment" >
<action
android:id="@+id/action_aFragment_to_bFragment"
app:destination="@id/bFragment"
app:popUpTo="@id/bFragment"
app:popUpToInclusive="true">
<argument
android:name="myname"
app:argType="org.kotlin.mpp.mobile.models.MyModel"
app:nullable="true" />
</action>
</fragment>
我现在使用的两种方法得到了完全相同的异常。
第一个是使用kotlinx-serialization插件,我有以下类型:
package org.kotlin.mpp.mobile.models
import kotlinx.serialization.Serializable
@Serializable
data class MyModel(val first: String = "", val last: String = "")
第二个我尝试的第一个不起作用是使用以下扩展java.io.Serializable制作一个特定于平台的(JVM)实现:
commondataModels.kt:
package org.kotlin.mpp.mobile.models
expect class MyModel(first: String, last: String)
实际数据模型.kt:
package org.kotlin.mpp.mobile.models
import java.io.Serializable
actual data class MyModel actual constructor(val first: String, val last: String): Serializable
我正在使用生成的方向类在我的 Activity 中进行导航调用:
import org.kotlin.mpp.mobile.models.*
val user = MyModel("Bruce","Lee")
host.findNavController().navigate(AFragmentDirections.actionAFragmentToBFragment(user))
提前感谢您的任何建议!
注意:我可以通过使用导航 API传递 Bundle 来使一切正常工作,但是我希望它可以与安全参数一起使用。