代码之家  ›  专栏  ›  技术社区  ›  yasin

包裹:无法封送值

  •  5
  • yasin  · 技术社区  · 7 年前

    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:包裹:无法封送值 通用域名格式。亚辛。myapp。Player@4e3940e

    我想我班的球员出了点问题,但我不知道是什么。我正在使用kotlin版本1.1.4。有人能帮我吗?

    4 回复  |  直到 7 年前
        1
  •  8
  •   Bob    7 年前

    您的类应该实现 Parcelable (或 Serializable 虽然 是安卓系统上的建议之一),能够使用意图在活动中传递对象。

    使用Kotlin 1.1.4和 Android Extensions Plugin ,您可以添加 @Parcelize 可包裹的 实施

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

    blog post .

    这个特性是实验性的,因此您在构建中启用了实验性标志。gradle文件:

    androidExtensions {
        experimental = true
    }
    

    另一种选择是使用 this plugin 生成 但是您应该记住每次更改类中的任何属性时都要更新实现代码。

    或者你可以自己写 实施

        2
  •  4
  •   zedlabs    4 年前

    jetpack-compose 此问题是由于 rememberSavable() 使用 remember()

        3
  •  1
  •   Les    7 年前

    你的班级需要 Parcelable Serializable . 有一个 jet-brains plugin 您可以使用生成实现(也可以使用实验功能 Parcelize ).

    可序列化 通常不那么复杂,可能就是你所需要的。

        4
  •  0
  •   Hamza Abdullah    7 年前

    仅使用Java,您的类应实现Parcelable和whit方法: writeToParcel(地块,int i)