包裹:无法封送价值
我和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
实现。
你的类需要Parcelable
或Serializable
。 有一个jet-brains插件可以用来生成一个实现(或者你可以使用一个实验性的功能Parcelize
)。
Serializable
通常不那么复杂,可能是你需要的一切。