如何解决如何确保Firebase仅从服务器获取数据
我只希望能够从Firebase服务器获取数据,并且如果没有Internet连接,它应该显示一条失败消息。
Source source = Source.SERVER;
firebaseFirestore.collection("stock").document(pid).get(source).addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document.exists()) {
String prod_id = document.getString("pid");
}
}
});
我尝试执行上述操作,但是如果没有互联网,它仍然会加载缓存的结果。
请帮忙。
解决方法
我只希望能够从Firebase服务器获取数据
这正是您的代码所做的。通过指定Source.SERVER
,您可以告诉Firestore仅返回服务器中的数据。
如果没有互联网连接,则应显示一条失败消息。
onFailure()
仅在读取文档时出现问题时(例如,您无权访问它们时)触发 。换句话说,当Firebase服务器由于在安全规则中设置的权限而拒绝读取操作时。如果用户设备上没有互联网连接,onFailure()
将永远不会触发,这是有道理的,因为您需要在离线状态下访问数据。 不能认为是失败。
我尝试执行上述操作,但是如果没有互联网,它仍然会加载缓存的结果。
这是正常现象。 Firestore SDK会缓存您的应用程序正在使用的Cloud Firestore数据的副本,因此您的应用程序可以在设备离线时访问数据。
编辑:
根据@FrankvanPuffelen的评论,在official documentation中还提到:
公共静态最终源服务器
导致Cloud Firestore避免缓存,如果无法访问服务器,则生成错误。请注意,如果服务器请求成功,缓存仍将更新。还要注意,延迟补偿仍然有效,因此任何待处理的写操作将在返回的数据(合并到服务器提供的数据)中可见。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。