Как решить проблему с типом Kotlin? - PullRequest
0 голосов
/ 24 ноября 2018

Я хочу передать массив пользовательских объектов через намерение.

    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, когда я пытаюсь типизировать значение.Я преобразовал список в типизированный массив, поскольку список не может быть передан через намерение как дополнительные функции.

enter image description here

Кроме того, даже если я произнесу его, игнорируя предупреждение Iможет получить доступ к значениям массива во втором действии на устройствах, поддерживающих SDK> 21, но на устройствах, поддерживающих SDK 19, это приводит к сбою приложения.

Как правильно отправить массив пользовательских объектов с помощью намерения?

1 Ответ

0 голосов
/ 25 ноября 2018

Вам просто нужно ввести в 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")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...