【发布时间】:2018-07-11 00:01:25
【问题描述】:
我在一个个人项目中开始使用 Cloud Firestore,并且在尝试从文档中检索列表时遇到了问题,而我仍然设法从后端接收了一些数据,但在检查数据库时并不那么精确。
Collection
DocumentN
-otherStuff
-usermatches: <---- This is an array
(0):
-Score:0
-Id:123
(1):
-Score:1
-Id:456
架构
我一直在尝试,下面的课程是我暂时解决 错误 HashMap cannot be cast to parameter.. 但我不知道如何真正实现我需要的,如果您有任何反馈或有有什么建议请告诉我
Backend.kt
docRef = db.collection("userdata").document(user.user_id)
docRef.get()
.addOnCompleteListener { task ->
if (task.isSuccessful) {
val document: DocumentSnapshot = task.result
val cedula = document.data!!["cedula"] as Long
val points = document.data!!["points"] as Long
// val usermatches = document.data!!["usermatches"] as HashMap<String, Any>
val alias = document.data!!["username"] as String
// val usermatches = document.toObject(Usermatches::class.java)
val map: MutableMap<String, Any>? = document.data
for (entry in map!!.entries) {
if (entry.key == "usermatches") {
val list = entry.value as ArrayList<Any>
for (each in list){
for (entry2 in each as HashMap<String, Any>){
var home_score: Long = 0
var winner: Long = 0
var userchanged: Boolean = true
var id: String = ""
var away_score: Long = 0
val usermatch = Usermatches(home_score, away_score, id, userchanged, winner)
when {
entry2.key == "away_score" -> {
away_score = entry2.value as Long
usermatch.away_score = away_score
// println(away_score)
}
entry2.key == "home_score" -> {
home_score = entry2.value as Long
usermatch.home_score = home_score
// println(home_score)
}
entry2.key == "id" -> {
id = entry2.value as String
usermatch.id = id
// println(id)
}
entry2.key == "userchanged" -> {
userchanged = entry2.value as Boolean
usermatch.userchanged = userchanged
// println(userchanged)
}
entry2.key == "winner" -> {
winner = entry2.value as Long
usermatch.winner = winner
// println(winner)
}
}
mDisposable.add(usermatchesViewModel.insert(Usermatches(home_score, away_score, id, userchanged, winner))
.subscribeOn(Schedulers.io())
.subscribe{ println("Checking")})
}
}
}
}
} else {
Log.d(TAG, "Error getting Usermatches ", task.exception)
}
}
})
用户匹配数据类
@Entity
data class Usermatches(var home_score: Long,
var away_score: Long,
@ColumnInfo(name = "usermatches_id") var id: String,
var userchanged: Boolean,
var winner: Long) {
@PrimaryKey(autoGenerate = true)
var num_id: Long = 0
}
【问题讨论】:
标签: android firebase kotlin google-cloud-firestore