首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >getSerializableExtra被否决了,还有什么可选的?

getSerializableExtra被否决了,还有什么可选的?
EN

Stack Overflow用户
提问于 2022-06-10 09:09:46
回答 6查看 5.9K关注 0票数 18

我已将33.和targetSdkVersioncompileSdkVersion升级为

现在,警告getSerializableExtragetParcelableExtra是不可取的。

我检查并确认了从这里开始,它是不推荐的。

建议使用、更新的getSerializableExtragetParcelableExtra。任何人都可以帮助我使用更新的方法。

  1. 在获得Object时发出警告

  1. 在获得ListArrayList时发出警告

EN

回答 6

Stack Overflow用户

发布于 2022-08-30 13:32:52

这就是我所用的:

代码语言:javascript
运行
复制
inline fun <reified T : Serializable> Bundle.serializable(key: String): T? = when {
  Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU -> getSerializable(key, T::class.java)
  else -> @Suppress("DEPRECATION") getSerializable(key) as? T
}

inline fun <reified T : Serializable> Intent.serializable(key: String): T? = when {
  Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU -> getSerializableExtra(key, T::class.java)
  else -> @Suppress("DEPRECATION") getSerializableExtra(key) as? T
}

我在这里也为getParcelable编写了相同的代码,并要求将其添加到直接支持库

票数 20
EN

Stack Overflow用户

发布于 2022-07-16 11:22:54

方法T getSerializableExtra(String, Class<T>)是从Android33中引入的。所以你应该在33以下的android设备上使用一个if块。

代码语言:javascript
运行
复制
fun <T : Serializable?> getSerializable(activity: Activity, name: String, clazz: Class<T>): T
{
    return if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU)
               activity.intent.getSerializableExtra(name, clazz)!!
           else
               activity.intent.getSerializableExtra(name) as T
}

然后你可以像这样在你的活动中使用它:

代码语言:javascript
运行
复制
val myPOJOClass = getSerializable(this, "my_intent_key", MyPOJOClass::class.java)
票数 10
EN

Stack Overflow用户

发布于 2022-08-24 08:37:20

然而,穆罕默德·赛义迪的答案完成了这一工作。但是在从onActivityResult().获取意图数据的情况下,它失败了

我们无法在onActivityResult().中使用活动的意图获取数据下面是我找到的解决办法。

解决方案1:使用扩展函数:

代码语言:javascript
运行
复制
fun <T : Serializable?> Intent.getSerializable(key: String, m_class: Class<T>): T {
    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU)
        this.getSerializableExtra(key, m_class)!!
    else
        this.getSerializableExtra(key) as T
}

使用:

代码语言:javascript
运行
复制
val myPOJOClass = intent.getSerializable("my_intent_key", MyPOJOClass::class.java)

解决方案2:使用正则函数:

代码语言:javascript
运行
复制
fun <T : Serializable?> getSerializable(intent: Intent, key: String, m_class: Class<T>): T {
    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU)
        intent.getSerializableExtra(key, m_class)!!
    else
        intent.getSerializableExtra(key) as T
}

使用:

代码语言:javascript
运行
复制
val myPOJOClass = getSerializable(intent, "my_intent_key", MyPOJOClass::class.java)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72571804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档