【问题标题】:Android 13 (SDK 33): Bundle.getSerializable(String) is deprecated, what is alternative?Android 13 (SDK 33):Bundle.getSerializable(String) 已弃用,有什么替代方案?
【发布时间】:2022-08-17 20:09:52
【问题描述】:

从 API 级别 33 开始,Bundle 类的 getSerializable(String) 方法已被弃用。文档建议改用getSerializable(String, Class)。但该功能仅适用于 API 级别 33。

我当前的代码:

val model = args.getSerializable(\"key\") as? Model

这是现在应该的样子吗?

val model = args.customGetSerializable<Model>(\"key\")

@Suppress(\"DEPRECATION\")
inline fun <reified T : Serializable> Bundle.customGetSerializable(key: String): T? {
    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
        getSerializable(key, T::class.java)
    } else {
        getSerializable(key) as? T
    }
}
  • 一个好点。也许也使用Parcelable
  • 好建议。我实际上将 Parcelable 用于更多其他模型。在这种情况下,上面的代码段实际上是用于枚举,因此示例中的“模型”是一个枚举。你怎么看待这件事?我应该坚持上面的代码还是用这个 stackoverflow.com/a/13385129/6272369 替换它?

标签: android kotlin bundle serializable


【解决方案1】:

这是现在应该的样子吗?

是的。

理想情况下,谷歌会为这些更改添加内容到BundleCompat,也许现在 Android 13 开始向用户发货。

【讨论】:

    猜你喜欢
    • 2015-11-21
    • 2016-08-16
    • 2023-03-13
    • 2022-10-05
    • 2022-06-10
    • 2022-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多