Не удалось связаться с бэкэндом Cloud Firestore - PullRequest
0 голосов
/ 21 марта 2020

Я пишу приложение для обмена сообщениями, которое использует 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, и эта ошибка появляется только тогда, когда приложение пытается получить пользовательские данные из пожарного магазина. Функция, которая получает данные из хранилища:

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)
} 

1 Ответ

0 голосов
/ 23 марта 2020

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

...