Как проверить, существует ли документ в firestore kotlin?

# #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

https://firebase.google.com/docs/reference/android/com/google/firebase/database/DatabaseReference.Список завершений

Комментарии:

1. Я попробовал код. Но я все еще не получаю ответа. Я попытался посмотреть, существует ли документ с определенным идентификатором. В моем случае документа с удостоверением личности не существует. Но я получаю вывод, как если бы документ существовал в тостовом сообщении.

2. возможно, он действительно существует в кэше? вы пробовали полное удаление и переустановку

3. ДА. Я попытался сейчас.