Kotlin在使用Intent传递数据类时取消getParceableExtra调用

myzjeezk  于 2023-01-05  发布在  Kotlin
关注(0)|答案(2)|浏览(346)

尝试使用Intent将数据类User从一个"活动"传递到另一个"活动"。

    • 我的putExtra看起来像这样使用我的观察乐趣:**
val intent = Intent(this, MainActivity::class.java)
            intent.putExtra("userData",userData)
            startActivity(intent)
    • get例程如下所示:**
userData = intent.getParcelableExtra<User>("userData") as User
    • 或**
userData = intent.getParcelableExtra("userData")

我的问题是Android Studio剔除了这个函数。我的用户数据类被标记为@Parcelize。这一切最终都是getParcelableExtra。

    • 我已添加到我的Gradle版本中:**
id 'kotlin-parcelize'

我读过一些关于ParcelableSerialable更现代的帖子,所以这就是我使用的技术。所有帖子都来自2018年或之前,其中许多是Java。

    • 如何使用Intent将数据类从一个Activity发送到另一个Activity?**
carvr3hs

carvr3hs1#

溶液:
考虑到最现代的解决方案需要编译器版本33,我选择了一个向后兼容性更强的解决方案,这段代码将数据对象转换成字符串,然后再转换回对象。

    • 设置:(放置)**
private var _userData = MutableLiveData<User>() // does the username and pw validate?
val userData : LiveData<User>
    get() = _userData
    • 设置:(获取)**
private lateinit var userData: User
    • 输入代码:**
val intent = Intent(this, MainActivity::class.java)
    val jsonUserData = Gson().toJson(userData)
    intent.putExtra("userData",jsonUserData)
    • 获取代码:**
val jsonUserData = intent.getStringExtra("userData")
        userData = Gson().fromJson(jsonUserData, User::class.java)
uajslkp6

uajslkp62#

由于getParcelableExtra (String name)从API级别33起已弃用,因此您可以从api级别33起使用getParcelableExtra (String name, Class<T> clazz)
在您的情况下,请用途:

val userData =
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
        intent.getParcelableExtra("userData", userData::class.java)
    }
    else{
        intent.getParcelableExtra("userData") as userData?
    }

其中TIRAMISU为常数值33
欲了解更多信息,请阅读:请访问:http://developer.android.com/reference/android/content/Intent#getParcelableExtra(获取额外可打包文件)

相关问题