2017-09-03 88 views
0

鉴于以下DB计划: enter image description here火力地堡不调用OnChildChanged活动

我要听任何mHotZoneRecord变化。这样做,我做了如下:

mDBRefUsers = mDatabase.getReference("https://stackoverflow.com/users/"); 
mDBRefUsers.child("mHotZoneRecord").addChildEventListener(new HotZoneNotification(this)); 

和其他地方的代码中,实现HowZoneNotification

class HotZoneNotification extends TableSyncInfo 
     implements ChildEventListener { 
     OnChildChanged(); 
     OnChildAdded(); 
} 

的问题是我不是任何得到OnChildChanged事件。

我在做什么错了?

+0

'只有在'/ users'下的现有节点发生变化时,才会调用'onChildChanged()'。 –

+0

你没有实现这些方法吗?也许我们可以帮助更多,如果你显示'HotZoneNotification'的完整实现 –

+0

这些已经实现,但由我删除,因为在我看来这个例子并不重要,因为回调本身没有被调用,并且mDbLitute和mdbLongtitude做了改变 –

回答

0

您将用户设置为不在mHotZoneRecord上。要设置监听器,您必须访问'-Kt8Y ......',以便执行您想要的操作,然后执行这些更改。

mDBRefUsers = mDatabase.getReference("https://stackoverflow.com/users/"); 
mDBRefUsers.addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
      // dataSnapshot .. hold list of users keys .. now you can hold it to set your listener 
      for(DataSnapshot dataSnapShot1 : dataSnapshot.getChildren()){ 
        mDBRefUsers.child(dataSnapShot1.getValue(String.class)) 
        .child("mHotZoneRecord") 
        .addChildEventListener(new HotZoneNotification(this)); 
        // this equals users.child("-Kt8YIIAEH6EKXIbh3YN").child("mHotZoneRecord").[YOU LINSTER] 

      } 
    } 

你做错的是你告诉数据库,有一个名为“mHotZoneRecord”在用户分支 这样PIC enter image description here

因此,我所做的孩子,我在“用户”分支进入然后我得到所有的密钥“Kt8YIIAEH6EKXIbh3YN - Kt8A ....”然后我设置监听器在“mHotZoneRecord”孩子包含在键中。

+0

感谢你的回答?但为什么使用SingleValueEvent而不是每次都会调用的常规valueEvent? –

+0

,因为您只需访问密钥,因此您无需在密钥上设置事件侦听器。 –