【问题标题】:How to solve Kotlin typecast issue?如何解决 Kotlin 类型转换问题?
【发布时间】:2023-03-06 13:10:02
【问题描述】:

我想通过意图传递自定义对象数组。

    val valuesToBeSent =  listOf(
            RSSSource("title", "someurl"),
            RSSSource("title2", "someurl")
    ).toTypedArray()

    val i = Intent(this, SecondActivity::class.java)
    i.putExtra("SOURCES", valuesToBeSent)
    startActivity(i)

    //ONSECOND ACTIVITY

    val rssSources = intent?.extras?.getSerializable("SOURCES") as? Array<RSSSource>

我可以将这样的值从一个活动传递到另一个活动。但是当我尝试类型转换值时,它在 android studio 中给出了以下警告。我将列表转换为类型化数组,因为列表不能作为附加值传递。

此外,即使我忽略警告,我也可以在支持 SDK > 21 的设备中访问第二个活动中的数组值,但在支持 SDK 19 的设备中,它会使应用程序崩溃。

通过 Intent 发送自定义对象数组的正确方法是什么?

【问题讨论】:

  • 我不知道它在21 api及以上是如何工作的!因为 kotlin list 没有实现可序列化,你可能想要使用 Arraylist 来代替。所以把arrayList放在意图中,事情应该没问题
  • 我不是有意发送列表,而是一个 TypedArray。
  • 是的,你是对的。类型化数组。但是您的问题是“通过意图发送自定义对象数组的正确方法是什么?”。我分享了我的看法。如果您需要序列化 ​​- 使用 ArrayList (或其他可序列化实体)。如果你在 KitKat 上遇到了一些奇怪的崩溃,很高兴看到它的详细信息。我从来没有遇到过这样的问题...

标签: android android-intent kotlin casting


【解决方案1】:

你只需要放入 Intent 正确的数据结构。可以序列化的东西。使用 ArrayList,为什么不呢?它可以正确序列化并且像沙姆一样工作。如果我可以通过意图为测试集合序列化编写代码,我会写这样的东西。

 fun testIntent() {
  val KEY = "key"
  val list = arrayListOf("one", "another")
  val intent = Intent().putExtra(KEY, list)
  val bundle = intent.getSerializableExtra(KEY) as? java.util.ArrayList<String> ?: emptyList<String>()

  assert(bundle[0] == "one")
}

【讨论】:

    猜你喜欢
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 1970-01-01
    相关资源
    最近更新 更多