Получить массив объектов из Firestore - PullRequest
0 голосов
/ 12 февраля 2019

Я получаю данные из пожарного магазина и помещаю их в ArrayList

arraylist=document.get("questionsList") as ArrayList<Question>
Toast.makeText(context, arraylist.size, Toast.LENGTH_LONG).show()

, и это нормально, когда я печатаю размер массива, когда мне нужно получить вопрос от Arraylist

Toast.makeText(context, arraylist!![0].question, Toast.LENGTH_LONG).show()

результат java.util.HashMap не может быть приведен к вопросу

документ в изображении пожарного хранилища здесь

Вопрос класса

class Question (var question:String,var choices:ArrayList<String>,var correctAnswer:String
                ,private var userAnswer:String): Parcelable {
    constructor(parcel: Parcel) : this(
        parcel.readString()!!, arrayListOf<String>().apply {
            parcel.readString()
        },
        parcel.readString()!!,
        parcel.readString()!!
    )
    constructor():this(question="",choices = ArrayList<String>(),correctAnswer = "",userAnswer = "")

    override fun writeToParcel(parcel: Parcel, flags: Int) {
        parcel.writeString(question)
        parcel.writeString(correctAnswer)
        parcel.writeString(userAnswer)
    }

    override fun describeContents(): Int {
        return 0
    }

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

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

1 Ответ

0 голосов
/ 12 февраля 2019

Вы можете использовать document.toObject, чтобы привести свой результат Firestore к классу Kotlin.Если вы просто используете get на поле, вы получите HashMap.В вашем случае вы можете создать класс со свойством questionsList и затем привести его к вашему классу.Я не использовал Kotlin в течение нескольких месяцев, но я считаю, что это будет примерно так:

data class MyQuestionList(
    var questionsList: ArrayList<Question>
)

val myQuestionList = document.toObject(MyQuestionList::class.java)

Toast.makeText(context, myQuestionList.questionsList!![0].question, Toast.LENGTH_LONG).show()

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...