Android firebase嵌套侦听器数据更改问题

Android firebase嵌套侦听器数据更改问题,android,firebase,firebase-realtime-database,listener,Android,Firebase,Firebase Realtime Database,Listener,我正在使用Firebase实时数据库。我有每个用户的朋友列表。我正在将用户的好友列表添加到recyclerview。没有错误,我可以查看好友列表。但是,如果我更改了一些关于用户朋友信息的内容,则适配器中不会有任何更改。如果我将一个新用户添加到好友列表中,适配器将感知到更改。 我使用嵌套的firebase侦听器。第一个侦听器用于获取用户朋友ID,第二个侦听器用于使用ID获取朋友信息 我想知道,如果用户朋友更改其联机状态,适配器会感应到它 这是我的json树: 这是我获取用户好友列表的代码:

我正在使用Firebase实时数据库。我有每个用户的朋友列表。我正在将用户的好友列表添加到recyclerview。没有错误,我可以查看好友列表。但是,如果我更改了一些关于用户朋友信息的内容,则适配器中不会有任何更改。如果我将一个新用户添加到好友列表中,适配器将感知到更改。 我使用嵌套的firebase侦听器。第一个侦听器用于获取用户朋友ID,第二个侦听器用于使用ID获取朋友信息

我想知道,如果用户朋友更改其联机状态,适配器会感应到它

这是我的json树:

这是我获取用户好友列表的代码:

        databaseReference.child("users").child(user_id).child("friends").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                //friends.clear();
                //friendInfoList.clear();
            //Toast.makeText(FriendsActivity.this, dataSnapshot.toString(), Toast.LENGTH_SHORT).show();
                for(DataSnapshot ds:dataSnapshot.getChildren()){
                    String friend_id=ds.getValue(String.class);
                    friends.add(new Friends(friend_id));
                    Toast.makeText(FriendsActivity.this, friend_id, Toast.LENGTH_SHORT).show();

                    databaseReference.child("users").child(friend_id).addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                            //friendInfoList.clear();
                                Users user=dataSnapshot.getValue(Users.class);
                                friendInfoList.add(new FriendInfo(user.getUsername(),user.getCountry(),user.isStatus()));
                        }

                        @Override
                        public void onCancelled(@NonNull DatabaseError databaseError) {

                        }
                    });

                }

           adapter=new FriendListRecyclerAdapter(FriendsActivity.this,friendInfoList);
            recyclerView.setAdapter(adapter);


        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

要更新适配器中的数据,请调用方法
notifyDataSetChanged()

从文档中:

通知附加的观察者基础数据已更改,任何反映数据集的视图都应刷新自身


要更新适配器中的数据,请调用方法
notifyDataSetChanged()

从文档中:

通知附加的观察者基础数据已更改,任何反映数据集的视图都应刷新自身


当朋友信息被更改时,您可能没有触发“users/user\id/friends”节点。另外,我认为您应该使用“子事件侦听器”。

当朋友信息发生更改时,您可能没有触发“users/user\u id/friends”节点。我还认为你应该使用“儿童事件监听器”。

谢谢你,兄弟。我试过这个。但是第二个侦听器不会通知更改。我在第二个侦听器中显示toast消息,并在服务器中更改子值。但tost消息从未显示您在何处添加了notifydatasetchanged?在编写此代码之前,我已经添加了。但是不工作如果friendinfolist为空??您没有检索到
friend\u id
,在第一个侦听器中删除for循环并添加日志
friend\u id
,然后告诉我您得到了什么。我试过这个。但是第二个侦听器不会通知更改。我在第二个侦听器中显示toast消息,并在服务器中更改子值。但tost消息从未显示您在何处添加了notifydatasetchanged?在编写此代码之前,我已经添加了。但是不工作如果friendinfolist为空??您没有检索到
friend\u id
,请在第一个侦听器中删除for循环并添加日志
friend\u id
,然后告诉我您得到了什么