Parcela: incapaz de calcular el valor

Estoy usando Kotlin con Anko y quiero enviar a otra actividad una list de Jugadores.

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

Mi actividad:

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

Cuando el código llega a la línea startActivity, aparece este error:

java.lang.RuntimeException: Parcel: no se puede orderar el valor com.yasin.myapp.Player@4e3940e

Supongo que algo anda mal con mi class Player, pero no sé qué. Estoy usando la versión 1.1.4 de Kotlin. ¿Puede ayudarme alguien?

Su class debe implementar Parcelable (o Serializable , aunque Parcelable es la recomendada en Android) para poder pasar los objects a través de Activity usando Intent.

Usando Kotlin 1.1.4 y el complemento de extensiones de Android , puede agregar @Parcelize anotación para get la implementación Parcelable .

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

Consulte la publicación del blog .

Esta característica está cubierta como experimental, por lo que debe activar un indicador experimental en su file build.gradle:

 androidExtensions { experimental = true } 

Otra opción es usar este complemento para generar el código Parcelable necesario para la implementación Parcelable , pero debe recordar actualizar el código de implementación cada vez que cambie cualquier propiedad de la class.

O puede escribir su propia implementación Parcelable .

Tu class debe ser Parcelable o Serializable . Existe un plugin de jet-cereins que puedes usar para generar una implementación (o puedes usar una function experimental Parcelize ).

Serializable suele ser less complejo y puede ser todo lo que necesita.

  • Cómo crear callbacks de funciones anidadas como anko - syntax DSL Kotlin
  • Corotines de Kotlin y Anko: return fuera de sincronía