如何解决Kotlin打字问题?

时间:2018-11-24 20:20:52

标签: android android-intent kotlin casting

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

    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中给出了以下警告。我将list转换为类型数组,因为list不能作为额外内容通过intent传递。

enter image description here

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

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

1 个答案:

答案 0 :(得分:1)

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

 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")
}