Firebase数据库获取特定级别android的子级

时间:2016-09-11 10:39:05

标签: android firebase firebase-realtime-database

我在Firebase中有以下数据库结构: enter image description here

在我发布活动的应用中。我希望在活动开始时只获取所有level0Node个节点。我这样做是这样的:

rootNode.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                Iterable<DataSnapshot> level0Nodes = dataSnapshot.getChildren();
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {}
        });

但我面临的问题是,如果level1Node上发生了任何更新,则再次调用onDataChanged我不想要的。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:2)

您正在寻找ValueEventListener

将您的rootNode.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { Iterable<DataSnapshot> level0Nodes = dataSnapshot.getChildren(); } @Override public void onCancelled(DatabaseError databaseError) {} }); 替换为1,代码如下所示:

UPDATE [ATIDGEN] SET [LASTID] = '25' WHERE [TABLEID] = 'ATLOGIN';
//success
::SQLEndTran(SQL_HANDLE_DBC, m_hdbc, SQL_COMMIT);
//success
BACKUP DATABASE [ArazDB2] TO DISK = 'D:\Amin88\Total\BKUP-13950621.BAK' WITH INIT,NOSKIP
//state 42000, Cannot perform a backup or restore operation within a transaction.

有关详细信息,请参阅Official Docs

答案 1 :(得分:1)

您有两种方法可以从特定参考中一次性获取总数据。

  1. rootNode.addValueEventListener(new ValueEventListener (){}

    //这是你正在使用的,根据文档,当这个节点 - rootNode上的数据发生变化时会触发。如果您只想通过调用

  2. 删除您的列表人员,则只能使用它

    rootNode.removeEventListener()方法,用于删除更多更新。

    1. 使用 rootNode.addListenerForSingleValueEvent(new ValueEventListener (){}
    2. 根据文档,这只会触发一次,所以当你的孩子发生变化时,这个列表器不会触发,你的问题就会得到解决。

      加上我只是建议你阅读firebase的完整文档,因为你的问题非常基础。