使用orderByChild()计数

时间:2018-03-14 20:19:11

标签: java android firebase firebase-realtime-database

我试图从通知子项中获取通知计数。另一个孩子有一个随机密钥(我不知道),其中有一个userKey值。

我想要使用orderByChild("userKey")并获取所有通知,但不知道如何执行此操作。我已经尝试过寻找解决方案,但我找不到解决方案。

Image

我已经尝试了这个,但它没有工作:

db.child("Notifications").orderByChild("userKey").equalTo(intent.getStringExtra("key")).addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                indicator.setText(String.valueOf(dataSnapshot.getChildrenCount()));
            }

            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {

            }

            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {

            }

我感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

只要向节点添加新通知,您的解决方案就会起作用。如果您想第一次阅读通知,则应使用SingleValueEventListener

db.child("Notifications").orderByChild("userKey").equalTo(intent.getStringExtra("key")).addListenerForSingleValueEvent(new ValueEventListener() {
      @Override
      public void onDataChange(DataSnapshot snapshot) {
         indicator.setText(String.valueOf(dataSnapshot.getChildrenCount()));
      }
      @Override
      public void onCancelled(DatabaseError databaseError) {        
      }
    });

答案 1 :(得分:0)

一种方法是更改​​“通知”的结构。节点结构来自 通知> Rand_Key> (Data + User_key) 至 通知> User_key> Rand_key> (数据) 如果您需要不断更新通知计数,可以使用Firebase云功能或您自己的节点服务器编写Node.js处理程序,您可以在其中收听通知' onChild添加,并在需要的任何地方更新数据。如果您想进行实验,请尝试使用云功能并记住它仍处于测试阶段。 https://firebase.google.com/docs/functions/database-events