包裹:无法封送价值

我和Anko一起使用Kotlin,我想发送一个玩家名单给另一个活动。

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。 有人可以帮助我吗?

你的类应该实现Parcelable (或者Serializable ,尽管Parcelable在Android上是推荐的),能够使用Intent跨Activity传递对象。

使用Kotlin 1.1.4和Android扩展插件 ,您可以添加@Parcelize注释来获取@Parcelize实现。

 @Parcelize class Player(var name: String?) : Parcelable { // ... 

参考博客文章 。

这个特性被作为实验报道,所以你在你的build.gradle文件中打开一个实验标志:

 androidExtensions { experimental = true } 

另一个选择是使用这个插件来生成Parcelable实现所需的样板代码,但是您应该记得每次更改类中的任何属性时更新实现代码。

或者你可以编写自己的Parcelable实现。

你的类需要ParcelableSerializable 。 有一个jet-brains插件可以用来生成一个实现(或者你可以使用一个实验性的功能Parcelize )。

Serializable通常不那么复杂,可能是你需要的一切。