Отправить arraylist объекта для следующего действия Kotlin - PullRequest
0 голосов
/ 25 октября 2019

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

Я прочитал, что должен был Пользователь реализовать 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")

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

Ответы [ 2 ]

2 голосов
/ 25 октября 2019
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.
}

Не удивительно. Реализация TODO по умолчанию - throw NotImplementedError().

. Следует рассмотреть возможность использования @Parcelize вместо реализации конструктора (Parcel), writeToParcel и descriptionContents. Он генерирует их реализацию для вас.

2 голосов
/ 25 октября 2019

Функция TODO() предназначена для постоянного сбоя. Вы должны заменить это чем-то. В этом случае вам нужно реализовать функцию writeToParcel, чтобы записать все свойства в Посылку в том же порядке.

Редактировать на основе ответа 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...