android - 使用 koitlin 时使用 parcelable 在 android 中崩溃
问题描述
- 我没有日志,因为我没有收到任何错误,但是一旦我从第一个屏幕传递数据,应用程序就会崩溃......
- 这是传递数据的正确方法吗
ResultTodaysEvents.kt
class ResultTodaysEvents() : Parcelable{
override fun writeToParcel(dest: Parcel?, flags: Int) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun describeContents(): Int {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
@SerializedName("id")
@Expose
private var id: Int = 0
@SerializedName("code")
@Expose
private var code: String? = null
@SerializedName("start_date")
@Expose
private var startDate: String? = null
@SerializedName("end_date")
@Expose
private var endDate: String? = null
@SerializedName("direct_walkin_isallowed")
@Expose
private var directWalkinIsallowed: Boolean = false
@SerializedName("pax_islimited")
@Expose
private var paxIslimited: Boolean = false
@SerializedName("total_pax_limit")
@Expose
private var totalPaxLimit: Int = 0
@SerializedName("event_ispaid")
@Expose
private var eventIspaid: Boolean = false
@SerializedName("event_price")
@Expose
private var eventPrice: Any? = null
@SerializedName("location_type")
@Expose
private var locationType: Int = 0
@SerializedName("location_name")
@Expose
private var locationName: String? = null
@SerializedName("address")
@Expose
private var address: String? = null
@SerializedName("city")
@Expose
private var city: String? = null
@SerializedName("state")
@Expose
private var state: String? = null
@SerializedName("country")
@Expose
private var country: String? = null
@SerializedName("zipcode")
@Expose
private var zipcode: String? = null
@SerializedName("latitude")
@Expose
private var latitude: Double = 0.toDouble()
@SerializedName("longitude")
@Expose
private var longitude: Double = 0.toDouble()
@SerializedName("created_at")
@Expose
private var createdAt: String? = null
@SerializedName("updated_at")
@Expose
private var updatedAt: String? = null
@SerializedName("event_master_code")
@Expose
private var eventMasterCode: String? = null
@SerializedName("event_master")
@Expose
private var eventMaster: EventMaster? = null
@SerializedName("event_sessions")
@Expose
private var eventSessions: List<EventSession>? = null
constructor(parcel: Parcel) : this() {
id = parcel.readInt()
code = parcel.readString()
startDate = parcel.readString()
endDate = parcel.readString()
directWalkinIsallowed = parcel.readByte() != 0.toByte()
paxIslimited = parcel.readByte() != 0.toByte()
totalPaxLimit = parcel.readInt()
eventIspaid = parcel.readByte() != 0.toByte()
locationType = parcel.readInt()
locationName = parcel.readString()
address = parcel.readString()
city = parcel.readString()
state = parcel.readString()
country = parcel.readString()
zipcode = parcel.readString()
latitude = parcel.readDouble()
longitude = parcel.readDouble()
createdAt = parcel.readString()
updatedAt = parcel.readString()
eventMasterCode = parcel.readString()
eventMaster = parcel.readParcelable(EventMaster::class.java.classLoader)
eventSessions = parcel.createTypedArrayList(EventSession)
}
fun getId(): Int {
return id
}
fun setId(id: Int) {
this.id = id
}
fun getCode(): String? {
return code
}
fun setCode(code: String) {
this.code = code
}
fun getStartDate(): String? {
return startDate
}
fun setStartDate(startDate: String) {
this.startDate = startDate
}
fun getEndDate(): String? {
return endDate
}
fun setEndDate(endDate: String) {
this.endDate = endDate
}
fun isDirectWalkinIsallowed(): Boolean {
return directWalkinIsallowed
}
fun setDirectWalkinIsallowed(directWalkinIsallowed: Boolean) {
this.directWalkinIsallowed = directWalkinIsallowed
}
fun isPaxIslimited(): Boolean {
return paxIslimited
}
fun setPaxIslimited(paxIslimited: Boolean) {
this.paxIslimited = paxIslimited
}
fun getTotalPaxLimit(): Int {
return totalPaxLimit
}
fun setTotalPaxLimit(totalPaxLimit: Int) {
this.totalPaxLimit = totalPaxLimit
}
fun isEventIspaid(): Boolean {
return eventIspaid
}
fun setEventIspaid(eventIspaid: Boolean) {
this.eventIspaid = eventIspaid
}
fun getEventPrice(): Any? {
return eventPrice
}
fun setEventPrice(eventPrice: Any) {
this.eventPrice = eventPrice
}
fun getLocationType(): Int {
return locationType
}
fun setLocationType(locationType: Int) {
this.locationType = locationType
}
fun getLocationName(): String? {
return locationName
}
fun setLocationName(locationName: String) {
this.locationName = locationName
}
fun getAddress(): String? {
return address
}
fun setAddress(address: String) {
this.address = address
}
fun getCity(): String? {
return city
}
fun setCity(city: String) {
this.city = city
}
fun getState(): String? {
return state
}
fun setState(state: String) {
this.state = state
}
fun getCountry(): String? {
return country
}
fun setCountry(country: String) {
this.country = country
}
fun getZipcode(): String? {
return zipcode
}
fun setZipcode(zipcode: String) {
this.zipcode = zipcode
}
fun getLatitude(): Double {
return latitude
}
fun setLatitude(latitude: Double) {
this.latitude = latitude
}
fun getLongitude(): Double {
return longitude
}
fun setLongitude(longitude: Double) {
this.longitude = longitude
}
fun getCreatedAt(): String? {
return createdAt
}
fun setCreatedAt(createdAt: String) {
this.createdAt = createdAt
}
fun getUpdatedAt(): String? {
return updatedAt
}
fun setUpdatedAt(updatedAt: String) {
this.updatedAt = updatedAt
}
fun getEventMasterCode(): String? {
return eventMasterCode
}
fun setEventMasterCode(eventMasterCode: String) {
this.eventMasterCode = eventMasterCode
}
fun getEventMaster(): EventMaster? {
return eventMaster
}
fun setEventMaster(eventMaster: EventMaster) {
this.eventMaster = eventMaster
}
fun getEventSessions(): List<EventSession>? {
return eventSessions
}
fun setEventSessions(eventSessions: List<EventSession>) {
this.eventSessions = eventSessions
}
companion object CREATOR : Parcelable.Creator<ResultTodaysEvents> {
override fun createFromParcel(parcel: Parcel): ResultTodaysEvents {
return ResultTodaysEvents(parcel)
}
override fun newArray(size: Int): Array<ResultTodaysEvents?> {
return arrayOfNulls(size)
}
}
}
/** Passing the data **/
private fun startEventScheduleForTodaysEvents(data: ResultTodaysEvents) {
val eventsIntent = Intent(this, ActEventSchedule::class.java)
eventsIntent.putExtra(Keys.EVENT_DATA,data)
startActivity(eventsIntent)
}
/** Get data from previous screen **/
private fun getDataFromPrevScreen() {
val extras = intent.extras
if (extras != null) {
data = extras.getParcelable(Keys.EVENT_DATA)
}
}
解决方案
问题是这些方法:
override fun writeToParcel(dest: Parcel?, flags: Int) {
TODO("not implemented")
}
override fun describeContents(): Int {
TODO("not implemented")
}
IDE 在这里TODO
生成的是一个函数,它会抛出一个异常,告诉您您忘记实现该方法,无论它是从哪里抛出的(您肯定应该在日志中看到)。
所以此时你需要做的实际上是实现Parcelable
,无论是传统方式,手动还是利用Parcelize
Kotlin Android Extensions 的特性。
推荐阅读
- r - R中数据框列的拆分和组合
- python - 截断文件的分组
- javascript - React_dom_development 在 Deno React 项目中未定义
- flutter - 如何在地图内获取与地球的当前距离?
- c++ - 转换指针引用的字符串
- makefile - GNU Makefile 替换参考问题:使用 % 两次
- javascript - 根据方程式设置间隔时间?
- arrays - SWIFT HealthKt 样本数组按日期划分为数组组,然后显示在 UITableView
- node.js - 在 nodejs 中调用导出的模块
- python - NameError:名称'self'未定义在