com.google.firebase.firestore.FirebaseFirestoreException:由于客户端离线而无法获取文档。安卓

问题描述 投票:0回答:9

我收到此运行时错误,但我不明白其背后的原因。

com.google.firebase.firestore.FirebaseFirestoreException: Failed to get document because the client is offline.

下面是我的 Activity 中尝试从云 Firestore 获取数据的代码

DocumentReference docRef = db.collection("room-id-1").document("participan-name-1");
    docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
        @Override
        public void onComplete(@NonNull Task<DocumentSnapshot> task) {
            if (task.isSuccessful()) {
                DocumentSnapshot document = task.getResult();
                if (document != null) {
                    Log.d(TAG, "DocumentSnapshot data: " + task.getResult().getData());
                    userData.registerUserToHotspot(roomId_str, participantName_str);
                } else {
                    Log.d(TAG, "No such document");
                }
            } else {
                Log.d(TAG, "get failed with ", task.getException());
            }
        }
    });

我能做点什么吗?

android firebase google-cloud-firestore
9个回答
4
投票

发生这种情况是因为任务完成时会触发

OnCompleteListener
,无论失败还是成功。为了避免错误,您可以单独使用
OnSuccessListener
OnFailureListener

任务成功时会调用

OnSuccessListener
,但如果出现上述错误,则会触发
OnFailureListener
,您可以在监听器的
onFailure()
方法中处理错误。

快乐编码:)


3
投票

如果没有任何帮助,并且您确定一切顺利,请执行后续步骤:

  1. 清理项目(构建 -> 清理项目)。您还可以使用“清理项目”来“无效和缓存”,以提高安全性。
  2. 从您的项目中删除 google-services.json 并同步。
  3. 构建项目。 Android studio 会抛出关于缺少 google-services.json 的构建异常,没关系。
  4. 从 Firebase 控制台再次下载 google-services.json,将其放入项目中并同步。
  5. 构建并运行。

希望对某人有帮助


1
投票

当我使用错误的文档路径时,我也遇到了同样的异常。当我修好路径后,它开始工作。

无论如何,错误消息具有误导性。


1
投票

就我而言,解决方案是在 Android Studio 中创建一个新的模拟器并在那里运行应用程序


0
投票

如果你使用 rxjava 那么用这种方式捕获 throwable 会很简单:

RxFirestore.getDocument(FirebaseFirestore.getInstance()
    .collection("info")
    .document("app"))
    .subscribeOn(Schedulers.io())
    .subscribe(snapshot -> {

    }, throwable -> Timber.e(throwable))

否则尝试以某种方式在 Promise 或/和 try-catch 块中捕获它


0
投票

对于我来说,我遇到这个问题是因为我忘记从 Firebase 控制台初始化我的 firestore 数据库。希望这对其他人有帮助。


0
投票

我在 API 19 以下的模拟器上遇到了这个问题,并向 Firebase 支持团队询问。 他们回复我说这是一个安全连接问题,并建议我在该模拟器上启用 TLS。 据我了解,Firebase 需要最新的安全提供程序才能进行连接。 如果您认为所有 Firebase 配置都是正确的,但在低于 API 19 的模拟器上仍然面临此问题,请确保模拟器具有最新的安全提供程序。

请通过此链接查看“Android 上的 TLS”部分:https://github.com/grpc/grpc-java/blob/master/SECURITY.md#tls-on-android

Google 表示,它通过 Google Play 服务提供最新的提供商。如果你想使用它,有一个文档。

https://developer.android.com/training/articles/security-gms-provider.html


0
投票

在执行任何删除或其他建议的操作之前,只需尝试以下两个:

  • 重新启动您正在测试的移动设备。
  • 连接到不同的互联网连接并尝试。

对于我来说,我的设备已连接到公共 Wifi,但互联网无法正常工作,尽管它不久前还运行良好。我的情况是,我在 Android 设备上删除并再次安装了该应用程序,之后,我开始遇到相同的错误。所以做以上两项对我来说很有效。


0
投票

我使用 Windows 11。对我有用的是:

  1. 转到
    C:\Users\<username>\AppData\Local\Android\Sdk
  2. emulator
    文件夹重命名为
    emulator_original
  3. 从设备管理器创建一个新设备。在此过程中,它会要求你安装模拟器。
  4. 安装模拟器。
  5. 启动设备。
© www.soinside.com 2019 - 2024. All rights reserved.