c-a*_*-an 1 android parcelable android-intent kotlin data-class
我sendData从发送StartActivity到ResultActivity。
val sendData = SendData(10, "xyz", "yss")
sendData.e = 933
sendData.f = "hello"
sendData.g = 39
// Log.d("A", "${sendData.toString}")
val intent = Intent(this@StartActivity, ResultActivity::class.java)
intent.putExtra(RESULT_DATA, sendData)
startActivity(intent)
Run Code Online (Sandbox Code Playgroud)
sendData = intent.extras!!.getParcelable(RESULT_DATA)
// Log.d("B", "${sendData.toString}")
Run Code Online (Sandbox Code Playgroud)
模型类看起来像这样。
@Parcelize
data class SendData(var a: Int, var b: String, var c: String) : Parcelable {
var e: Int? = null
var f: String? = null
var g: Int? = null
var isClicked = false
override fun toString(): String{
return JsonUtil.toJson(this) // custom util
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我检查Log-A、Log-B时。
// Log-A
{
"a": 10,
"b": "xyz",
"c": "yss",
"e": 933,
"f": "hello",
"g": 39,
"isClicked": false
}
// Log-B
{
"a": 10,
"b": "xyz",
"c": "yss",
"isClicked": false
}
Run Code Online (Sandbox Code Playgroud)
因此,定义为 Nullable 的成员在传递后为 null。这段代码有什么问题?
工作方式@Parcelize是它仅序列化/反序列化主构造函数中的属性。您仅在主构造函数中声明了propertiesa和b。c因此,编译器只会将a、b和的值插入c生成的值中Parcel,当然,只有这些值会在接收端被解组。
您需要将其他属性添加到主构造函数中,或者Parcelable自己实现接口而不是使用@Parcelize.
请参阅https://joaoalves.dev/posts/kotlin-playground/parcelable-in-kotlin-here-comes-parcelize/
另请参阅此问题以及答案中的各种建议
| 归档时间: |
|
| 查看次数: |
1009 次 |
| 最近记录: |