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

时间:2019-03-17 14:22:16

标签: android firebase firebase-realtime-database listener

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

我希望用户朋友更改其在线状态时,适配器会感知到它。

这是我的json树:  json tree

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

        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) {

        }
    });

2 个答案:

答案 0 :(得分:1)

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

从文档中

  

notifyDataSetChanged

     

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

答案 1 :(得分:1)

更改好友信息后,可能不会触发“ users / user_id / friends”节点。另外,我认为您应该使用“子事件监听器”。