我正在将Kotlin与Anko一起使用,我想向其他活动发送一个玩家列表。
class Player(var name: String?) {
var score: Int = 0
init {
this.score = 0
}
}
我的活动:
class MainActivity: AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle ? ) {
btn.setOnClickListener {
val players = ArrayList <Player> ()
players.add(Player("John"))
players.add(Player("Jeff"))
startActivity <ScoreActivity> ("key" to players)
}
}
}
当代码到达startActivity行时,我收到此错误:
java.lang.RuntimeException:Parcel:无法编组值 com.yasin.myapp.Player@4e3940e
我认为我的班级球员有问题,但我不知道是什么。我正在使用kotlin版本1.1.4。有人可以帮帮我吗?
答案 0 :(得分:4)
您的课程应该实现Parcelable
(或Serializable
,尽管Parcelable
是Android上建议的),以便能够使用Intent在Activity中传递对象。
使用Kotlin 1.1.4和Android Extensions Plugin,您可以添加@Parcelize
注释以获得Parcelable
实施。
@Parcelize
class Player(var name: String?) : Parcelable {
// ...
参考blog post。
此功能仅作为实验性使用,因此您在build.gradle文件中打开了一个实验性标记:
androidExtensions {
experimental = true
}
另一种选择是使用this plugin生成Parcelable
实现所需的样板代码,但是每次更改类中的任何属性时都应该记住更新实现代码。
或者您可以编写自己的Parcelable
实现。
答案 1 :(得分:0)
您的课程必须是Parcelable
或Serializable
。您可以使用jet-brains plugin来生成实现(或者您可以使用实验性功能Parcelize
)。
Serializable
通常不那么复杂,可能就是您所需要的一切。
答案 2 :(得分:0)
使用Java Just Your Class应该实现Parcelable和whit方法: writeToParcel(Parcel parcel,int i)
答案 3 :(得分:0)
对于使用 jetpack-compose
的任何人来说,此问题是由 rememberSavable()
引起的,请使用 remember()
或将值存储在 viewModel 中