包裹:无法整理价值
Parcel: unable to marshal value
我正在将 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
我想我的 class 播放器有问题,但我不知道是什么。我使用的是科特林版本 1.1.4。有人可以帮助我吗?
您的 class 应该实现 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
实现所需的样板代码,但您应该记得在每次更改 [=37= 中的任何属性时更新实现代码].
或者您可以编写自己的 Parcelable
实现。
您的 class 需要 Parcelable
或 Serializable
。有一个 jet-brains plugin 可用于生成实现(或者您可以使用实验性功能 Parcelize
)。
Serializable
通常不那么复杂,可能就是您所需要的。
使用 Java Just Your Class 应该实现 Parcelable 和 whit 方法:
writeToParcel(Parcel 包裹, int i)
对于使用 jetpack-compose
的任何人,此问题是由于 rememberSavable()
,请使用 remember()
或将值存储在 viewModel
中
我正在将 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
我想我的 class 播放器有问题,但我不知道是什么。我使用的是科特林版本 1.1.4。有人可以帮助我吗?
您的 class 应该实现 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
实现所需的样板代码,但您应该记得在每次更改 [=37= 中的任何属性时更新实现代码].
或者您可以编写自己的 Parcelable
实现。
您的 class 需要 Parcelable
或 Serializable
。有一个 jet-brains plugin 可用于生成实现(或者您可以使用实验性功能 Parcelize
)。
Serializable
通常不那么复杂,可能就是您所需要的。
使用 Java Just Your Class 应该实现 Parcelable 和 whit 方法: writeToParcel(Parcel 包裹, int i)
对于使用 jetpack-compose
的任何人,此问题是由于 rememberSavable()
,请使用 remember()
或将值存储在 viewModel