webentwicklung-frage-antwort-db.com.de

Wie wird ein benutzerdefiniertes Objekt über eine Absicht in kotlin übergeben?

  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
}

Es wurde versucht, den obigen Code zum Übertragen von Personenobjekten des Typs Person mithilfe von Kotlin zu verwenden. Der Fehler wird jedoch angezeigt. Bitte helfen Sie, das Problem für mich zu lösen.

10
Ankit Kumar

Stellen Sie zunächst sicher, dass Sie Serializable in der Klasse People_ implementieren:

class People : Serializable {
//your stuff
}

Stellen Sie sicher, dass Ihre inneren Felder der Klasse People auch die Schnittstelle Serializable implementieren. Andernfalls erhalten Sie einen Laufzeitfehler.

Dann sollte es funktionieren:

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

Um Leute von Intent zu erhalten, müssen Sie anrufen:

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

Implementiere Serializable im Objekt:

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

oder

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

Dann können Sie das Objekt mit Intent übergeben:

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

Zum Schluss erhalten Sie in Activity2 das Objekt mit:

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

Einen besseren Weg gefunden, dies zu tun:

In deinem Schulabschluss:

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

Android {
    androidExtensions {
        experimental = true
    }
}

In Ihrer Datenklasse:

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

In der Quellaktivität:

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

In der Zielaktivität:

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

Dieser Beitrag kann nützlich sein für das, was Sie vorhaben:

Gibt es einen bequemen Weg, um mit Kotlin Parcelable-Datenklassen in Android zu erstellen?

Grundsätzlich bietet Kotlin einige kleine Extras:

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

Siehe den Beitrag für weitere Informationen.

1
Javatar

Ich habe eine bessere Methode gefunden, um eine Objektaktivität mithilfe von Parcelable an eine andere zu übergeben. Dies ist schneller als die Serialisierung Android: Unterschied zwischen Parcelable und Serializable?

fügen Sie zuerst diese Codezeilen in build.gradle (App) ein. 

Android{
    androidExtensions {
            experimental = true
        }
}

ich bekomme eine Antwort von hier

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

Bestehen mit Absicht --->

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

Aus Vorsatz ---> 

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

in Kotlin können Sie Folgendes ausprobieren, um die Aktivität zu starten und einige Daten weiterzugeben:

startActivity(intentFor<NameOfActivity>(STRING to data))

Viel Spaß

0
Rafael Filipake

Ihre People-Klasse muss Parcelable folgendermaßen implementieren:

class People(): Parcelable{
// stuff


}

Android Studio zeigt einen Fehler an. Bewegen Sie einfach den Cursor auf "People" und drücken Sie Alt + Enter. Jetzt sollte die Option zum Generieren einer Parcelable-Implementierung angezeigt werden.

Dieser generierte Code enthält etwas 

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

und woanders 

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

Stellen Sie sicher, dass alle Elemente in diesen Methoden enthalten sind, und stellen Sie beim Ändern sicher, dass Lese- und Schreibvorgänge in derselben Reihenfolge stattfinden. 

0
A. Kuchinke