我知道Firebase实时数据库提供离线支持,但如何区分在线连接或本地离线更改提供的数据?
答案 0 :(得分:2)
Firebase数据库提供了一种了解客户端是否已连接的特定方法。
Google在该主题上写了一篇方便的documentation。
从提供的链接:
检测连接状态
对于许多与状态相关的功能,客户端可以知道它何时在线或离线。 Firebase实时数据库客户端在
/.info/connected
提供了一个特殊位置,每当客户端的连接状态发生变化时,该位置都会更新。DatabaseReference connectedRef = FirebaseDatabase.getInstance().getReference(".info/connected"); connectedRef.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot snapshot) { boolean connected = snapshot.getValue(Boolean.class); if (connected) { System.out.println("connected"); } else { System.out.println("not connected"); } } @Override public void onCancelled(DatabaseError error) { System.err.println("Listener was cancelled"); } });
/.info/connected
是一个布尔值,在客户端之间不同步,因为该值取决于客户端的状态。换句话说,如果一个客户端将/.info/connected
读为false,则无法保证单独的客户端也会读取false。在Android上,Firebase会自动管理连接状态,以减少带宽和电池使用量。如果客户端没有活动的侦听器,没有挂起的写入或
onDisconnect
操作,并且goOffline
方法未明确断开连接,则Firebase会在60秒不活动后关闭连接。
了解您的客户端是否已连接到数据库有助于区分在线和离线存储提供的数据。我很确定没有具体方法可以查看DataSnapshot
是否来自在线或离线数据。