繁体   English   中英

Android 无法序列化 Kotlin lambda

[英]Android can't serialize Kotlin lambda

我们可以读到 lambda function 默认是序列化的(https://discuss.kotlinlang.org/t/are-closures-serializable/1620
但我收到错误:

java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.example.dialogfragment.Arguments)

我的 class Arguments:

class Arguments(val function: ()-> Unit) : Serializable

我的 lambda 出了什么问题?
(当 Android 需要杀死我的片段时出现此错误,因为 memory 低:)

如果要序列化或打包某些内容,则需要确保每个字段都是可序列化或可打包的。 在您的情况下,您正在尝试序列化val function: ()-> Unit这是不可序列化的。 不幸的是,您不能使 function 可序列化。 你应该重新考虑这个论点 class 并传递一些不同的东西。 可能您可以获得一些导致做出决定的参数,然后在您的片段中调用 function。

现在使用Parcelalbe而不是Serilizable

1. 在您的 build.gradle 文件(应用程序)中添加id 'kotlin-parcelize'

plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'kotlin-kapt'
    id 'kotlin-parcelize'    //here
}

2. 打包您的 Lambda 包装 Class:

@Parcelize
class Listener(val clickAction: () -> Unit) : Parcelable {
    fun onClick() = clickAction()
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM