第二章:Firebase中的事件

作者: CPPAlien | 来源:发表于2016-03-07 11:41 被阅读1166次

    简介

    如果您尚不清楚如何使用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

    相关文章

      网友评论

        本文标题:第二章:Firebase中的事件

        本文链接:https://www.haomeiwen.com/subject/mocakttx.html