# #android #firebase #kotlin #google-cloud-platform #google-cloud-firestore
Вопрос:
Я пытаюсь проверить, существует ли документ в Firestore. Но я получаю неправильный результат, когда пытаюсь запустить код. Это мой код. На самом деле, в коллекции нет документа, соответствующего названному документу currentUse
. Но я понимаю, что задача выполнена успешно, и всплывающее сообщение появляется по мере существования документа. Где я мог ошибиться и как проверить наличие документа в Котлине.
val currentUse= FirebaseAuth.getInstance().currentUser?.uid
private val mFireStore = FirebaseFirestore.getInstance()
val docref =mFireStore.collection("Users").document("$currentUse")
docref.get().addOnCompleteListener { task ->
if (task.isSuccessful){
Toast.makeText(applicationContext,"Exists",Toast.LENGTH_SHORT).show()
startActivity(Intent(applicationContext, MainActivityUser::class.java))
}
}
Ответ №1:
На самом деле в коллекции нет документа, соответствующего документу с именем currentUse. Но я понимаю, что задача выполнена успешно, и всплывающее сообщение появляется по мере существования документа.
Если вы проверяете только успешное выполнение задачи, это не означает, что документ, на который указывает ссылка, действительно существует. Это означает, что ваш вызов get() выполнен без ошибок.
Чтобы проверить, существует ли конкретный документ, вы должны явно вызвать функцию exists() для объекта DocumentSnapshot. Поэтому, пожалуйста, используйте следующие строки кода:
docref.get().addOnCompleteListener { task ->
if (task.isSuccessful) {
val document = task.result
if(document != null) {
if (document.exists()) {
Log.d("TAG", "Document already exists.")
} else {
Log.d("TAG", "Document doesn't exist.")
}
}
} else {
Log.d("TAG", "Error: ", task.exception)
}
}
Комментарии:
1. Мне пришлось добавить нулевую галочку в строку
if(document.exists())
послеdocument
. Я получил результат. Спасибо.2. Приятно слышать, что вы получили результат. Я также добавил нулевую проверку в свой обновленный ответ.
Ответ №2:
Примечание: Если в местоположении, на которое ссылается docRef, нет документа, результирующий документ будет пустым, а вызов exists для него вернет значение false.
^ Если вы используете addOnSuccessListener
И ниже приведено для addOnCompleteListener
if (task.isSuccessful){
if(task.result != null) {
Toast.makeText(applicationContext,"Exists",Toast.LENGTH_SHORT).show()
startActivity(Intent(applicationContext, MainActivityUser::class.java))
}
}
Все это показано в приведенных здесь примерах: https://firebase.google.com/docs/firestore/query-data/get-data
Вы также можете прочитать больше здесь:
https://firebase.google.com/docs/reference/android/com/google/firebase/database/DatabaseReference
Комментарии:
1. Я попробовал код. Но я все еще не получаю ответа. Я попытался посмотреть, существует ли документ с определенным идентификатором. В моем случае документа с удостоверением личности не существует. Но я получаю вывод, как если бы документ существовал в тостовом сообщении.
2. возможно, он действительно существует в кэше? вы пробовали полное удаление и переустановку
3. ДА. Я попытался сейчас.