我想知道在Android上,当你向数据库添加一个监听器时,底层的实际机制是如何工作的。是否更频繁拉动或其他特殊的东西?
更新 为了更清楚,我理解听众是什么,但我的意思是“监听”方案如何工作,客户端(Android)如何知道服务器上的数据发生了变化。这只是一个期刊拉动吗? (而Firebase的工程师已经做了很多工作来覆盖它并让我们更轻松。)
看起来firebase不是开源的。
// Attach an listener to read the data at our posts reference
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
System.out.println(snapshot.getValue());
}
@Override
public void onCancelled(FirebaseError firebaseError) {
System.out.println("The read failed: " + firebaseError.getMessage());
}
});
答案 0 :(得分:22)
免责声明:这是对撰写本文时工作原理的简要描述。在您阅读时,情况可能已经发生了变化。
当您的应用连接到Firebase数据库时,它会打开从设备到Firebase服务器的Web套接字连接。此连接在您的应用的生命周期内保持打开状态,或直到您拨打goOffline()
。
当您附加侦听器时,客户端会将位置(和潜在的查询参数)发送到服务器。服务器将该侦听器添加到所有已连接客户端的所有侦听器的列表中。然后它还会发回该听众的初始数据。
每当写入操作提交到数据库时,服务器都会扫描侦听器。对于每个相关的侦听器,服务器通过打开的Web套接字向客户端发送更新。
答案 1 :(得分:0)
异步发生
向节点引用添加侦听器将异步获取对节点引用所做的任何更改
void onDataChange(DataSnapshot snapshot)
将使用此位置的数据快照调用此方法。每次数据更改时也会调用它。
void onCancelled(FirebaseError错误)
如果此侦听器在服务器上失败,或者由于安全性和Firebase规则而被删除,则会触发此方法。有关保护数据的详细信息,请参阅:安全快速入门
示例
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
System.out.println(snapshot.getValue());
Users users = snapshot.getValue(Users.class) //This is your POJO class
String name = users.getName(); //Other getter methods to fetch data from firbase
}
@Override
public void onCancelled(FirebaseError firebaseError) {
System.out.println("The read failed: " + firebaseError.getMessage());
}
});
答案 2 :(得分:-1)
指南Firebase - Retrieve Data on Android
中对此进行了解释此方法在连接侦听器时触发一次,并在每次包括子项在内的数据发生更改时再次触发。