首页 > 解决方案 > 将对象的数组列表发送到下一个活动 Kotlin

问题描述

我想将对象用户的数组列表发送到下一个活动。我在互联网上尝试了很多选项,但没有一个有效。它不应该那么难,但它似乎不像我想要的那样工作。应用程序刚刚关闭。

我读到我必须让用户实现 Parcelable。

这是我在第一个活动中尝试做的事情:


  btnFindMatch.setOnClickListener {
            val intent = Intent(this,PeopleActivity::class.java)
            intent.putParcelableArrayListExtra("userlist", users)

            //intent.putExtra("userlist",users)
            startActivity(intent)

        }

我的用户类:

package nl.duoapp.trashtoss.classes

import android.os.Parcel
import android.os.Parcelable

data class User(val name : String, val hobby: String, val description : String, val birthdate : String, val gender : String, val lat : String, val long : String) : Parcelable {
    constructor(parcel: Parcel) : this(
        parcel.readString(),
        parcel.readString(),
        parcel.readString(),
        parcel.readString(),
        parcel.readString(),
        parcel.readString(),
        parcel.readString()
    ) {
    }

    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.
    }

    companion object CREATOR : Parcelable.Creator<User> {
        override fun createFromParcel(parcel: Parcel): User {
            return User(parcel)
        }

        override fun newArray(size: Int): Array<User?> {
            return arrayOfNulls(size)
        }
    }
}

要读取数据,我使用以下命令:

        users = intent.getParcelableArrayListExtra("userlist")

应用程序在到达下一个活动之前崩溃。

标签: androidkotlin

解决方案


TODO()功能旨在始终崩溃。你必须用一些东西来代替它。在这种情况下,您需要实现将writeToParcel所有属性以相同顺序写入 Parcel 的功能。

根据 EpicPandaForce 的回答进行编辑。或者只是使用@Parcelize,这样您就不必自己实现它。你的整个班级可以是这样的:

@Parcelize
data class User( 
    val name : String, 
    val hobby: String, 
    val description : String, 
    val birthdate : String, 
    val gender : String, 
    val lat : String, 
    val long : String) : Parcelable

推荐阅读