Не удалось подключиться к серверной части Cloud Firestore

Я пишу приложение для обмена сообщениями, которое использует Firebase Firestore, Storage и Authentication. Сначала при открытии запрашиваются пользовательские данные, и если пользователь с введенным пользователем номером существует, тогда приложение получает его имя и псевдоним из Firestore. Но в этот момент приложение останавливается, отвечает и выводит это сообщение в logcat:

W/Firestore: (21.4.1) [OnlineStateTracker]: Could not reach Cloud Firestore backend. Backend didn't respond within 10 seconds

This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.

Я тестирую приложение на реальном устройстве с Android 10, и эта ошибка появляется только тогда, когда приложение пытается получить данные пользователя из firestore. Функция получения данных из firestore:

fun getUserFromFirestoreAndInsertItInDB(number: String): MessengerUser = runBlocking(Dispatchers.IO) {
        val user = Firebase.firestore.collection("Users").document(number).get()
            .await().toMessengerUser()
        database.messengerUserDao.insert(user)
        user
}

toMessengerUser () функция:

fun DocumentSnapshot.toMessengerUser(): MessengerUser {
    val name = data!!["name"] as String
    val nickname = data!!["nickname"] as String
    val number = data!!["phoneNumber"] as String
    val lastOnline =
        (data!!["lastOnline"] as Long) + Calendar.getInstance().timeZone.rawOffset
    lateinit var stream: InputStream
    Firebase.storage.getReference("UsersPictures/$number")
        .child(number).stream
        .addOnSuccessListener {
             stream = it.stream
        }
        .addOnFailureListener {
            FirebaseCrashlytics.getInstance().recordException(it.cause!!)
        }
    val picture = Drawable.createFromStream(stream, null)
    return MessengerUser(picture, name, nickname, number, lastOnline)
} 

person Василий Курагов    schedule 21.03.2020    source источник
comment
Здесь вы можете найти руководство о том, как создать полное и функциональное приложение для чата Firestore с помощью Kotlin < / а>.   -  person Alex Mamo    schedule 21.03.2020


Ответы (1)


Проблема связана с блокировкой потока с помощью метода ожидания. Только Java: та же ошибка с методами ReentrantLock и RxJava blockingGet (), но не с CountdownLatch.

person user13109347    schedule 23.03.2020