web-dev-qa-db-fra.com

Comment passer un objet personnalisé via l'intention dans kotlin

  fun launchNextScreen(context: Context, people: People): Intent {
  val intent = Intent(context, NextScreenActivity::class.Java)
  intent.putExtra(EXTRA_PEOPLE, (Parcelable) people)
  //intent.putExtra(EXTRA_PEOPLE, people as Parcelable)
  //intent.putExtra(EXTRA_PEOPLE, people)
  // tried above all three ways
  return intent
}

Essayé le code ci-dessus pour transmettre aux personnes l'objet de type Personnes via l'intention en utilisant kotlin, mais en obtenant une erreur . S'il vous plaît, aidez-les à résoudre ce problème pour moi.

10
Ankit Kumar

Tout d’abord, assurez-vous d’implémenter Serializable dans la classe People- s:

class People : Serializable {
//your stuff
}

Assurez-vous que vos champs internes de la classe People implémentent également l'interface Serializable. Sinon, vous obtiendrez une erreur d'exécution.

Alors ça devrait marcher:

 fun launchNextScreen(context: Context, people: People): Intent {
  val intent = Intent(context, NextScreenActivity::class.Java)
  intent.putExtra(EXTRA_PEOPLE, people)
  return intent
}

Pour recevoir les personnes renvoyées par Intent, vous devez appeler:

val people = getIntent().getExtras().getSerializableExtra(EXTRA_PEOPLE) as? People
13
A. Shevchuk

Implémentez Serializable dans l'objet:

data class Object (
        var param1: Int? = null,
        var param2: String? = null
) : Serializable

ou

class Object : Serializable {
        var param1: Int? = null,
        var param2: String? = null
}

Ensuite, vous pouvez transmettre l'objet à l'aide de l'intention:

val object = Object()
...
val intent = Intent(this, Activity2::class.Java)
intent.putExtra("extra_object", object as Serializable)
startActivity(intent)

Enfin, dans Activity2, vous obtenez l'objet avec:

val object = intent.extras.get("extra_object") as Object
6
fireb86

Trouver un meilleur moyen de le faire:

Dans ton grade:

apply plugin: 'org.jetbrains.kotlin.Android.extensions'

Android {
    androidExtensions {
        experimental = true
    }
}

Dans votre classe de données:

@Parcelize
data class Student(val id: String, val name: String, val grade: String) : Parcelable

En activité source:

val intent = Intent(context, Destination::class.Java)
        intent.putExtra("student_id", student)
        context.startActivity(intent)

En activité de destination:

student = intent.getParcelableExtra("student_id")
3
Ankit Kumar

Ce message pourrait être utile pour ce que vous avez l’intention de faire:

Existe-t-il un moyen pratique de créer des classes de données Parcelable dans Android avec Kotlin?

En gros, Kotlin fournit quelques petits extras:

@Parcelize
class User(val firstName: String, val lastName: String) : Parcelable

Voir le post pour plus d'informations.

1
Javatar

J'ai trouvé un meilleur moyen de passer objet d'une activité à une autre à l'aide de Parcelable, il est plus rapide que la sérialisation Android: Différence entre Parcelable et Serializable?

commencez par ajouter ces lignes de code dans build.gradle (app) 

Android{
    androidExtensions {
            experimental = true
        }
}

je reçois la réponse de ici

@Parcelize 
class Model(val title: String, val amount: Int) : Parcelable

passe avec intention --->

val intent = Intent(this, DetailActivity::class.Java)
intent.putExtra(DetailActivity.EXTRA, model)
startActivity(intent)

Obtenir de l'intention ---> 

val model: Model = intent.getParcelableExtra(EXTRA)
1
Ashik Azeez

Votre classe People doit implémenter Parcelable comme ceci:

class People(): Parcelable{
// stuff


}

Le studio Android va vous montrer une erreur. Simple, déplacez votre curseur sur "Personnes" et appuyez sur alt + entrée. Il devrait maintenant afficher l'option permettant de générer une implémentation Parcelable.

Ce code généré contiendra quelque chose comme 

parcel.writeString(member1)
parcel.writeInt(member2)

et ailleurs 

member1=parcel.readString()
member2=parcel.readInt()

Assurez-vous que tous les membres sont contenus dans ces méthodes et lors de la modification, assurez-vous que les opérations de lecture et d'écriture se déroulent exactement dans le même ordre. 

0
A. Kuchinke