android - 包裹 : unable to marshal value

标签 android kotlin anko

我将 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/

相关文章:

java - 如何同时删除实时数据库中的用户身份验证和用户帐户?

android - ImageView 缩放 : fix height variable width with maxWidth

android - Kotlin/Anko 按钮 onClick 不起作用

Android Studio 3.0 金丝雀 1 : Gradle Sync Error

android - Kotlin/Anko 防止按钮关闭警报对话框

Android studio gitignore 不会忽略 .iml

java - 更新太多通知导致卡顿,如何改善?

android - 如何将两个可变实时数据的结果合二为一

android - 类型不匹配 : inferred type is String? 但需要字符串 kotlin

kotlin - runBlocking 中的 deferred.await() 抛出的异常即使在被捕获后也被视为未处理