Android Firebase childEventListener onChildAdded添加重复对象

Android Firebase childEventListener onChildAdded添加重复对象,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我有一个用于登录用户匹配列表的侦听器,如下所示: matchesListener = mFirebaseRef.child(FirebaseReference.CHILD_USERS) .child(currentUser.getId()) .child(FirebaseReference.CHILD_MATCHES) .addChildEventListener(new ChildEventListener() if(!acceptedMatches.contains

我有一个用于登录用户匹配列表的侦听器,如下所示:

matchesListener = mFirebaseRef.child(FirebaseReference.CHILD_USERS)
    .child(currentUser.getId())
    .child(FirebaseReference.CHILD_MATCHES)
    .addChildEventListener(new ChildEventListener()
if(!acceptedMatches.contains(dataSnapshot.getValue(Match.class))){
    acceptedMatches.add(dataSnapshot.getValue(Match.class));
    matchFragment.adapterMatches.notifyDataSetChanged();
}else{
    //Do nothing
}
OnChildaded方法如下所示:

matchesListener = mFirebaseRef.child(FirebaseReference.CHILD_USERS)
    .child(currentUser.getId())
    .child(FirebaseReference.CHILD_MATCHES)
    .addChildEventListener(new ChildEventListener()
if(!acceptedMatches.contains(dataSnapshot.getValue(Match.class))){
    acceptedMatches.add(dataSnapshot.getValue(Match.class));
    matchFragment.adapterMatches.notifyDataSetChanged();
}else{
    //Do nothing
}
此代码将添加的值添加到列表中,然后通知适配器进行更新。只有在目标用户接受挂起的请求后,才能将匹配添加到用户的匹配列表中。如果用户接受,将运行以下代码(通过单击我创建的自定义适配器中的“接受”按钮):

数据已正确添加到firebase中,但ui未正确更新。显然,一旦接受了挂起的用户,相同的用户将出现在两个匹配列表中。因此,两个用户将具有相同的匹配,其中一个用户将他/她添加到匹配列表中。我认为match listener的onChildaded方法应该对此负责,但我似乎无法理解为什么它会导致这个问题

编辑:似乎在不应该拉的时候拉了相同的dataSnapshot。下一行

//add target user to current user
        mFirebaseRef.child(FirebaseReference.CHILD_USERS).child(match.getMatchId()).child(FirebaseReference.CHILD_MATCHES).child(mainScreen.currentUser.getId()).setValue(mainScreen.currentUserMatch);
与以下情况相比,应返回不同的快照:

//add current user to target user
            mFirebaseRef.child(FirebaseReference.CHILD_USERS).child(mainScreen.currentUser.getId()).child(FirebaseReference.CHILD_MATCHES).child(match.getMatchId()).setValue(match);

被称为。但是,它们都返回相同的快照,这会导致将相同的用户添加到目标用户和当前登录用户的ui中(正如我在firebase中正确添加数据之前所说的,两个用户都显示在彼此的匹配列表中).

似乎只有在同一设备上的用户之间切换而不停止应用程序时,才会出现此问题。如果我接受一个挂起的请求,然后强制停止应用程序本身,然后作为其他用户登录,它将在ui上显示正确的匹配项。我不确定是什么导致了这个问题,因为我正在删除OnDestroyi中的所有侦听器。似乎只有在同一设备上的用户之间切换而不停止应用程序时,这个问题才会出现。如果我接受一个挂起的请求,然后强制停止应用程序本身,然后作为其他用户登录,它将在ui上显示正确的匹配项。我不确定是什么导致了这个问题,因为我正在删除onDestroy中的所有侦听器