簡體   English   中英

Kotlin - 如何使用數據 class 將數據從 firebase 保存到 livedata?

[英]Kotlin - How to save data from firebase to livedata with data class?

我嘗試運行此代碼,但出現錯誤:無法轉換 java.lang.String 類型的 object 我需要從實時數據庫中獲取數據並將其保存到 livedata。

fun loadRecentlyAddedVoices(){
    REF_DATABASE_ROOT.child(NODE_STICKERS).addListenerForSingleValueEvent(object :
        ValueEventListener {
        override fun onDataChange(snapshot: DataSnapshot) {

            for (ds in snapshot.children) {
                recentlyAddedVoices.value = ds.getValue(VoicesModel::class.java).toString()
            }
        }

        override fun onCancelled(error: DatabaseError) {

        }

    })
}

聲音 Model:

data class VoicesModel(
       val title:String,
       val description: String,
       val count: Int,
       val likes: Int,
       val downloads: Int,
       val data: VoiceDataModel
)

語音數據模型:

data class VoiceDataModel(
       val voice_title: String,
       val source: String
)

無法轉換 java.lang.String 類型的 object

根據您的共享代碼,此異常很可能來自以下內容:

recentlyAddedVoices.value = ds.getValue(VoicesModel::class.java).toString()

recentlyAddedVoices AddedVoices 看起來像MutableLiveData列表的VoiceDataModel

在這里使用toString()是引發異常的原因。 並且沒有理由將此值轉換為字符串。

相反,您需要首先通過迭代VoicesModel的普通列表,然后在列表完成時設置LiveData

fun loadRecentlyAddedVoices(){
    REF_DATABASE_ROOT.child(NODE_STICKERS).addListenerForSingleValueEvent(object :
        ValueEventListener {
        override fun onDataChange(snapshot: DataSnapshot) {

            val temp: MutableList<VoicesModel> = mutableListOf()

            for (ds in snapshot.children) {
                 val value: voiceModel = ds.getValue<VoicesModel>(VoicesModel::class.java)
                 // Aggregating to a non-live data list
                 temp.add(value)
            }

            // Setting the Live data value:
            recentlyAddedVoices.value = temp
        }

        override fun onCancelled(error: DatabaseError) {

        }

    })
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM