Посылка: неспособность маршалировать стоимость

Я использую Kotlin с Anko, и я хочу отправить в другой список игроков список.

class Player(var name: String?) { var score: Int = 0 init { this.score = 0 } } 

Моя деятельность:

  class MainActivity: AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle ? ) { btn.setOnClickListener { val players = ArrayList <Player> () players.add(Player("John")) players.add(Player("Jeff")) startActivity <ScoreActivity> ("key" to players) } } } 

Когда код достигает строки startActivity, я получаю эту ошибку:

java.lang.RuntimeException: Посылка: не удалось маршалировать значение com.yasin.myapp.Player@4e3940e

Я полагаю, что что-то не так с моим классным игроком, но я не знаю, что. Я использую kotlin версию 1.1.4. Кто-то может мне помочь?

Ваш класс должен реализовать Parcelable (или Serializable , хотя Parcelable – это рекомендованный на Android), чтобы передавать объекты через Activity с использованием Intent.

Используя Kotlin 1.1.4 и Android Extensions Plugin , вы можете добавить аннотацию @Parcelize чтобы получить реализацию Parcelable .

 @Parcelize class Player(var name: String?) : Parcelable { // ... 

См. Сообщение в блоге .

Эта функция рассматривается как экспериментальная, поэтому вы добавляете экспериментальный флаг в файл build.gradle:

 androidExtensions { experimental = true } 

Другой вариант – использовать этот плагин для генерации кода шаблона, необходимого для реализации Parcelable , но вы должны помнить об обновлении кода реализации каждый раз, когда вы изменяете какие-либо свойства в классе.

Или вы можете написать свою собственную Parcelable реализацию.

Ваш класс должен быть Parcelable или Serializable . Существует плагин для струйных мозгов, который вы можете использовать для создания реализации (или вы можете использовать экспериментальную функцию Parcelize ).

Serializable обычно менее сложный, и может быть все, что вам нужно.

Использование Java Просто ваш класс должен реализовать метод Parcelable и whit: writeToParcel (Parcel parcel, int i)