如何确保Firebase仅从服务器获取数据

时间:2020-08-13 11:20:19

标签: java android firebase google-cloud-firestore

我只希望能够从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");
                       }
                                
                    }
                });

我尝试执行上述操作,但是如果没有互联网,它仍然会加载缓存的结果。
请帮忙。

1 个答案:

答案 0 :(得分:0)

我只希望能够从Firebase服务器获取数据

这正是您的代码所做的。通过指定Source.SERVER,您可以告诉Firestore仅返回服务器中的数据。

如果没有互联网连接,则应显示一条失败消息。

onFailure()仅在读取文档时出现问题时(例如,您无权访问它们时)触发 。换句话说,当Firebase服务器由于在安全规则中设置的权限而拒绝读取操作时。如果用户设备上没有互联网连接,onFailure()将永远不会触发,这是有道理的,因为您需要在离线状态下访问数据。 不能认为是失败。

我尝试执行上述操作,但是如果没有互联网,它仍然会加载缓存的结果。

这是正常现象。 Firestore SDK会缓存您的应用程序正在使用的Cloud Firestore数据的副本,因此您的应用程序可以在设备离线时访问数据。

编辑:

根据@FrankvanPuffelen的评论,在official documentation中还提到:

公共静态最终源服务器

导致Cloud Firestore避免缓存,如果无法访问服务器,则生成错误。请注意,如果服务器请求成功,缓存仍将更新。还要注意,延迟补偿仍然有效,因此任何待处理的写操作将在返回的数据(合并到服务器提供的数据)中可见