我将 Kotlin 与 Anko 一起使用,我想向另一个 Activity 发送玩家列表。
class Player(var name: String?) {
var score: Int = 0
init {
this.score = 0
}
}
我的 Activity :
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: unable to marshal value com.yasin.myapp.Player@4e3940e
我想我的 Player 类有问题,但我不知道是什么。我使用的是 Kotlin 版本 1.1.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
实现。
关于android - 包裹 : unable to marshal value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45840605/