Serializable的Kotlin intet.putExtra给出编译错误



我试图通过intent将Serializable数据类从一个活动传递到另一个活动,但Android Studio不接受我的数据类作为参数。编辑说"以下函数都不能用提供的参数"来调用;。如果我试图将我的数据类强制转换为Serializable,它会说";这个演员阵容永远不会成功;。我的数据类:

@Serializable
data class MessageModel(
val timeStamp: String,
val body: String
)

以及将额外信息传递给意图的代码:

val intent = Intent(this, MessageActivity::class.java)
val test = MessageModel("timeStamp", "message body")
intent.putExtra("A string for referencing", test)
startActivity(intent)

我尝试的第二种方法:

val intent = Intent(this, MessageActivity::class.java)
val test = MessageModel("timeStamp", "message body")
intent.putExtra("A string for referencing", test as Serializable)
startActivity(intent)

我试过用gradle从终端构建,以防是安卓工作室出错,但也出现了同样的问题。

注意:传递字符串附加功能很好,只是Serializable有一些问题。我看不出我做错了什么,我能找到的每个教程和线程都只需传递一个Serializable对象,它就可以工作了。非常感谢您的帮助!

您应该实现Serializable,而不是注释。

数据类MessageModel(val时间戳:字符串,val body:字符串):可串行化

克服这个问题并仍然使用Kotlin可序列化的一种方法是使用JSON编码。

在发送端,按照以下进行编码

intent.putExtra("data", Json.encodeToString(object))

在接收端,按照以下进行解码

override fun onReceive(context: Context, intent: Intent) {
val data = intent.getStringExtra("data")
val object = Json.decodeFromString<Object>(data)
}

最新更新