firebase监听器实际上如何工作?

时间:2016-07-09 07:08:15

标签: android firebase firebase-realtime-database

我想知道在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());
    }
});

3 个答案:

答案 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

中对此进行了解释
  

此方法在连接侦听器时触发一次,并在每次包括子项在内的数据发生更改时再次触发。

相关问题