я могу получить код ошибки firestore при использовании Source.Server, но пользователь не подключен к inte rnet? - PullRequest
1 голос
/ 11 января 2020

У меня появляется сообщение об ошибке, подобное этому, если пользователь не подключен к inte rnet, я установил источник Source.Server:

не удалось получить документ с сервера. (Однако этот документ существует в локальном кэше. Запустите снова, не устанавливая SERVER для извлечения кэшированного документа.)

Я хочу написать собственное сообщение об ошибке, на самом деле я могу жестко закодировать сообщение что-то вроде этого

if (message == "failed to get document from server ........") {
   showToast("showing my own message here")
}

, но оно может легко сломаться, если, например, firebase sdk изменит строку сообщения об ошибке. есть ли какой-либо код ошибки или ошибка перечисления, чтобы идентифицировать это?

вот код

fun getUserData(source: Source = Source.SERVER, userID: String, completion: (user: User?, errorMessage:String?) -> Unit) {

        db.document("users/${userID}").get(source).addOnSuccessListener { documentSnapshot ->

            if (documentSnapshot == null || !documentSnapshot.exists()) {
                completion(null,"Account is not found")
                return@addOnSuccessListener
            }

            val userData = documentSnapshot.data ?: return@addOnSuccessListener
            val user = User(userData)
            completion(user,null)


        }.addOnFailureListener {
            completion(null,it.localizedMessage) // error message comes from here
        }


    }

1 Ответ

1 голос
/ 11 января 2020

Исключение, доставленное вашему обратному вызову прослушивателя сбоев, имеет тип FirebaseFirestoreException . Этот класс содержит формальный тип Code , который определяет точную ошибку. Я не могу сказать, какой это будет, но лучше всего вы можете выяснить, изучив результаты. Если по какой-то причине на самом деле нет кода, попробуйте зарегистрировать проблему на Firebase SDK GitHub .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...