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