Firecasts with David EastAndroid开发Android开发经验谈

第二章:Firebase中的事件

2016-03-07  本文已影响1166人  CPPAlien

简介

如果您尚不清楚如何使用Firebase,您可以参考:《Firebase快速集成-Android篇》。本篇主要介绍Firebase中的两大事件的用法:值事件和子事件。它们都是用于监听Firebase线上数据库中数据的变化,只是具体表现不同。

值事件(ValueEventListener),可以用在只有单一数据的节点上,也可以用在含有子项数据的节点上,它的特色是只要任何一个子项数据有变化,它会把该节点上所有子项数据返回。

子事件(ChildEventListener),它在处理上述具有子项的情况时,不同于值事件,它会针对不同子项的数据变化做出针对该子项的动作。

在《Firebase快速集成-Android篇》一文中,我们的例子程序就用到了值事件,它使用值事件来监听某一个节点中值得变化。本章我们会创建一个具有子项的节点,然后分别用两种事件来监听,来让大家感受下不同。

创建含有子项的节点

先介绍一个好用的Firebase数据库管理插件-Vulcan。您可以在Chrome Web Store中下载,插件安装成功后。打开浏览器,右键点击Inspect(检查),您会看到多了一个Firebase选项卡,选择后,您会看到如下界面


Vulcan操作界面

选择您想操作的界面接可以操作了。然后在根节点上点击add后,选择Add JSON,此时就可以添加一个节点,并且可以用JSON方式来创建它的子项。

创建含有子项的节点

成功后,您会看到


值事件

mFireRef = new Firebase("https://fire-gochat.firebaseio.com/");
Firebase messages = mFireRef.child("messages");
messages.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        Map<String, String> data = dataSnapshot.getValue(Map.class);
        Log.d(TAG, data.get("a") + " " + data.get("b"));
    }

    @Override
    public void onCancelled(FirebaseError firebaseError) {

    }
});

因为该节点中的关键字和值都是String的,所以我们可以用一个Map<String, String>类型来获得该数据。

应用启动后,会打印Hello World
改变Hello为Welcome后,会打印Welcome World
删除a后,会打印null World
从上我们可以看到,改变某一个子项,整个Map都会被返回。

子事件

messages.addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
        String data = dataSnapshot.getValue(String.class);
        Log.d(TAG, "onChildAdded = " + data);
    }

    @Override
    public void onChildChanged(DataSnapshot dataSnapshot, String s) {
        String data = dataSnapshot.getValue(String.class);
        Log.d(TAG, "onChildChanged = " + data);
    }

    @Override
    public void onChildRemoved(DataSnapshot dataSnapshot) {
        String data = dataSnapshot.getValue(String.class);
        Log.d(TAG, "onChildRemoved = " + data);
    }

    @Override
    public void onChildMoved(DataSnapshot dataSnapshot, String s) {
        //ignore here
    }

    @Override
    public void onCancelled(FirebaseError firebaseError) {

    }
});

从上可以看到,针对节点子项,分别有Added、Changed、Removed、Moved的四种操作监听,其中Moved与子项的位置变动有关,此处不做详细介绍。

Added:每添加一个子项会调用一次,并且dataSnapshot中只有被添加项目的值。
注:应用首次运行时,已存在的子项都会触发一次Added

Changed、Remved会在子项的值改变和子项被删除时被触发,返回被操作的子项的值。

详细使用方法可以参考API文档:
https://www.firebase.com/docs/java-api/javadoc/com/firebase/client/ChildEventListener.html

相关代码:
https://github.com/CPPAlien/FirebaseEvents

相关视频:
https://www.youtube.com/watch?v=2FRBDXBs30Y

上一篇下一篇

猜你喜欢

热点阅读