[英]How to save Firebase dataSnapshot object and key into Kotlin DTO data class?
[英]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.