Как передать пользовательский объект через intent в 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
}

пробовал выше код, чтобы передать людям объект типа людей через намерение с помощью kotlin, но получить ошибку. Пожалуйста, помогите решить это для меня.

6 ответов


во-первых, убедитесь, что вы реализуете Serializable на People-S-класс:

class People : Serializable {
//your stuff
}

убедитесь, что ваши внутренние поля People класс также реализует Serializable интерфейс, othervise вы получите ошибку времени выполнения.

тогда он должен работать:

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

чтобы получить людей обратно от намерения, вам нужно позвонить:

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

реализовать Serializable в объекте:

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

или

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

затем вы можете передать объект, используя Intent:

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

наконец, в Activity2 вы получаете объект с:

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

в Котлине, чтобы начать деятельность и передать некоторые данные, вы можете попробовать что-то вроде этого:

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

Удачи


ваш класс People должен реализовать Parcelable следующим образом:

class People(): Parcelable{
// stuff


}

Android studio покажет вам ошибку. Просто переместите курсор на "люди" и нажмите alt+enter. Теперь он должен показать возможность создания реализации Parcelable.

этот сгенерированный код будет содержать что-то вроде

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

и

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

убедитесь, что все члены содержатся в этих методах, и при его изменении убедитесь, что чтение и запись происходят в одном и том же порядке.


этот пост может быть полезен для того, что вы собираетесь сделать:

есть ли удобный способ создания классов данных Parcelable в Android с помощью Kotlin?

в основном, Котлин предоставляет некоторые дополнительные услуги:

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

см. Этот пост для получения дополнительной информации.


нашел лучший способ сделать это.

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