25

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

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

对此我能做些什么吗?

4

8 回答 8

3

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

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

希望我对某人有所帮助

于 2021-11-30T13:16:40.590 回答
3

发生这种情况是因为OnCompleteListener在任务完成时触发,无论是失败还是成功。为避免该错误,您可以使用单独的OnSuccessListenerand OnFailureListener

OnSuccessListener任务成功时调用,但如果发生上述错误,OnFailureListener将被触发,您可以在onFailure()侦听器的方法中处理错误。

快乐编码:)

于 2019-06-29T21:41:47.223 回答
1

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

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

于 2018-10-24T14:13:07.953 回答
1

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

于 2020-02-27T09:13:50.693 回答
0

我最近遇到了这个问题,我尝试删除并重新安装模拟器仍然没有骰子。因此,我决定捕获错误并在存在特定错误时重试查询。如果用户真的离线,我会包含一个超时,如果不是,它将在重试后检索数据。

    fun makeFirestoreQuery(){
         fireStoreDb
        .collection(Constants.USER_DATA)
        .document(currentUserEmail)
        .get()
        .addOnSuccessListener{documentSnapshot->
        //perform opertion with the data
        }.addOnFailureListener{exception->
        if(exception.message?.contains("Failed to get document because 
        the client is offline")){
        makeFirestoreQuery() //recursively call itself
        //if the user is really offline, set a time out
        }}
    }
于 2020-08-31T18:46:10.717 回答
0

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

于 2020-08-03T19:08:59.360 回答
0

转到 Firebase 网站,然后为您的帐户创建一个数据库

转到firebase网站,然后创建一个数据库,然后一切都会好起来的:)

于 2021-10-24T07:12:33.423 回答
0

如果您使用的是 rxjava,那么以这种方式捕获 throwable 会很简单:

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

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

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

于 2018-01-18T07:55:24.987 回答