我只希望能够从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");
}
}
});
我尝试执行上述操作,但是如果没有互联网,它仍然会加载缓存的结果。
请帮忙。
答案 0 :(得分:0)
我只希望能够从Firebase服务器获取数据
这正是您的代码所做的。通过指定Source.SERVER
,您可以告诉Firestore仅返回服务器中的数据。
如果没有互联网连接,则应显示一条失败消息。
onFailure()
仅在读取文档时出现问题时(例如,您无权访问它们时)触发 。换句话说,当Firebase服务器由于在安全规则中设置的权限而拒绝读取操作时。如果用户设备上没有互联网连接,onFailure()
将永远不会触发,这是有道理的,因为您需要在离线状态下访问数据。 不能认为是失败。
我尝试执行上述操作,但是如果没有互联网,它仍然会加载缓存的结果。
这是正常现象。 Firestore SDK会缓存您的应用程序正在使用的Cloud Firestore数据的副本,因此您的应用程序可以在设备离线时访问数据。
编辑:
根据@FrankvanPuffelen的评论,在official documentation中还提到:
公共静态最终源服务器
导致Cloud Firestore避免缓存,如果无法访问服务器,则生成错误。请注意,如果服务器请求成功,缓存仍将更新。还要注意,延迟补偿仍然有效,因此任何待处理的写操作将在返回的数据(合并到服务器提供的数据)中可见。