我收到此运行时错误,但我不明白其背后的原因。
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());
}
}
});
我能做点什么吗?
发生这种情况是因为任务完成时会触发
OnCompleteListener
,无论失败还是成功。为了避免错误,您可以单独使用 OnSuccessListener
和 OnFailureListener
。
任务成功时会调用OnSuccessListener
,但如果出现上述错误,则会触发OnFailureListener
,您可以在监听器的onFailure()
方法中处理错误。
快乐编码:)
如果没有任何帮助,并且您确定一切顺利,请执行后续步骤:
希望对某人有帮助
当我使用错误的文档路径时,我也遇到了同样的异常。当我修好路径后,它开始工作。
无论如何,错误消息具有误导性。
就我而言,解决方案是在 Android Studio 中创建一个新的模拟器并在那里运行应用程序
如果你使用 rxjava 那么用这种方式捕获 throwable 会很简单:
RxFirestore.getDocument(FirebaseFirestore.getInstance()
.collection("info")
.document("app"))
.subscribeOn(Schedulers.io())
.subscribe(snapshot -> {
}, throwable -> Timber.e(throwable))
否则尝试以某种方式在 Promise 或/和 try-catch 块中捕获它
对于我来说,我遇到这个问题是因为我忘记从 Firebase 控制台初始化我的 firestore 数据库。希望这对其他人有帮助。
我在 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
在执行任何删除或其他建议的操作之前,只需尝试以下两个:
对于我来说,我的设备已连接到公共 Wifi,但互联网无法正常工作,尽管它不久前还运行良好。我的情况是,我在 Android 设备上删除并再次安装了该应用程序,之后,我开始遇到相同的错误。所以做以上两项对我来说很有效。
我使用 Windows 11。对我有用的是:
C:\Users\<username>\AppData\Local\Android\Sdk
。emulator
文件夹重命名为 emulator_original
。