Я переношу свое приложение из базы данных в реальном времени в базу данных firestore. До сих пор я делал это с помощью EventListener, который успешно работал, но когда дело доходит до использования QuerySnapshot, я в растерянности.
Моя функция - получать информацию о пользователе из базы данных. Это выглядит так:
fun getUsersInfo() {
usersDb!!.addSnapshotListener(EventListener<QuerySnapshot> { snapshot, e ->
if (e != null) {
Log.d(TAG, "Listen failed.", e)
return@EventListener
} else {
//retrieve documents and set name, age, etc.
}
})
}
Но я не уверен, как ссылаться на документы, поскольку в QuerySnapshot нет команды get, в отличие от DocumentSnapshot
Вот старый код в реальном времени, который я пытаюсь перенести:
usersDb!!.addSnapshotListener(object : ChildEventListener {
override fun onChildAdded(dataSnapshot: DataSnapshot, s: String?) {
if (dataSnapshot.child("sex").value != null) {
if (dataSnapshot.key == FirebaseAuth.getInstance().uid)
return
if (dataSnapshot.exists() && !dataSnapshot.child("connections").child("nope").hasChild(currentUId!!) && !dataSnapshot.child("connections").child("yeps").hasChild(currentUId!!)) {
if (dataSnapshot.child("sex").value!!.toString() == userInterest || userInterest == "Both") {
var name = ""
var age = ""
var job = ""
var about = ""
// var userSex = ""
var profileImageUrl = "default"
if (dataSnapshot.child("name").value != null)
name = dataSnapshot.child("name").value!!.toString()
// if (dataSnapshot.child("sex").value != null)
// userSex = dataSnapshot.child("sex").value!!.toString()
if (dataSnapshot.child("age").value != null)
age = dataSnapshot.child("age").value!!.toString()
if (dataSnapshot.child("job").value != null)
job = dataSnapshot.child("job").value!!.toString()
if (dataSnapshot.child("about").value != null)
about = dataSnapshot.child("about").value!!.toString()
if (dataSnapshot.child("profileImageUrl").value != null)
profileImageUrl = dataSnapshot.child("profileImageUrl").value!!.toString()
val item = cardObject(dataSnapshot.key!!, name, age, about, job, profileImageUrl)
for (i in rowItems.indices)
if (rowItems[i] === item)
return
rowItems.add(item)
cardAdapter!!.notifyDataSetChanged()
}
}
}
}
override fun onChildChanged(dataSnapshot: DataSnapshot, s: String?) {}
override fun onChildRemoved(dataSnapshot: DataSnapshot) {}
override fun onChildMoved(dataSnapshot: DataSnapshot, s: String?) {}
override fun onCancelled(databaseError: DatabaseError) {}
})
По сути, это просто проверка, если пользователи одного пола, и проверка, чтобы не добавлять текущего пользователя в массив
Приносим свои извинения, если код трудно читать, я впервые использую firebase. Дайте мне знать, если бы вы сделали что-то по-другому