【问题标题】:Android getParcelableExtra deprecatedAndroid getParcelableExtra 已弃用
【发布时间】:2022-08-18 19:01:40
【问题描述】:

我正在使用 Parcelable 通过意图传递数据并使用 getParcelableExtra 接收数据。但是 getParcelableExtra 似乎已被弃用,如何修复此代码中的弃用警告?或者,还有其他选择吗? .我正在使用 compileSdkVersion 33。

代码sn-p:

 var data = intent.getParcelableExtra(\"data\")
  • 嗨,亲爱的@RabindraKhadka,您应该考虑添加更多details 样例code,以帮助我们充分了解您的问题。
  • 嗨@GedFlod,我添加了一些代码sn-p。

标签: android android-intent parcelable


【解决方案1】:

Now we need to use getParcelableExtra() with the type-safer class added to API 33

示例代码

val userData = if (VERSION.SDK_INT >= 33) {
  intent.getParcelableExtra("DATA", User::class.java)
} else {
  intent.getParcelableExtra<User>("DATA")
}

【讨论】:

    【解决方案2】:

    official documentation 中所述,getParcelableExtra 在 API 级别 33 中已弃用。

    因此检查 API LEVEL 是否 >= 33 或更改方法,

    ...
    
    if (Build.VERSION.SDK_INT >= 33) { 
        data = getParcelableExtra (String name, Class<T> clazz)
    }else{
        data = intent.getParcelableExtra("data")
    }
    

    【讨论】:

      【解决方案3】:

      以下是我用于BundleIntent 的两种扩展方法:

      private inline fun <reified T> Intent.parcelable(key: String): T? = when {
        SDK_INT >= 33 -> getParcelableExtra(key, T::class.java)
        else -> @Suppress("DEPRECATION") getParcelableExtra(key) as? T
      }
      
      private inline fun <reified T> Bundle.parcelable(key: String): T? = when {
        SDK_INT >= 33 -> getParcelable(key, T::class.java)
        else -> @Suppress("DEPRECATION") getParcelable(key) as? T
      }
      

      【讨论】:

        猜你喜欢
        • 2023-01-25
        • 2012-12-25
        • 2021-08-31
        • 2015-09-18
        • 2018-02-11
        • 2018-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多