gpt4 book ai didi

java - 如何在 Android 上的 Firebase 中跟踪听众?

转载 作者:搜寻专家 更新时间:2023-10-30 21:19:20 24 4
gpt4 key购买 nike

我在一个位置有给定用户的聊天室列表,在另一个位置有给定聊天室的消息总数。我想跟踪用户所属聊天室中的一些消息。

我有以下 fragment :

//getting all chat rooms this user belongs to
mFirebase.child("myChatRooms").child("testUser").addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded (DataSnapshot dataSnapshot, String previousKey){
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
ChatRoom myRoom = postSnapshot.getValue(ChatRoom.class);

//listening to message count in every chat room user belongs to
mFirebase.child("chatRoomMessageCount").child(postSnapshot.getKey()).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//number of messages have changed
}

@Override
public void onCancelled(FirebaseError firebaseError) {

}
});
}
}

//......
}

问题是,我如何在稍后调用 onChildRemoved 时删除所有这些 ValueEventListener,或者我不再需要它们了?

处理这种情况的推荐方法是什么?我应该将子键和监听器存储在 HashMap 中并自己跟踪它们,还是有某种方法可以删除给定 firebase 位置的所有监听器?

最佳答案

一种数据认真的方法是创建一个 ValueEventListenersHashMap 然后在 onStoponDestroy 你将删除那些听众。

为简单起见,您应该使用单个事件监听器来获取房间。然后,您可以为每个房间创建一个实时监听器。

public class MainActivity extends Activity {

private Firebase mRef;
private HashMap<Firebase, ValueEventListener> mListenerMap;

@Override
protected void onStart() {
super.onStart();

mRef = new Firebase("https://<your-firebase-app>/myChatRooms/testUser");

mRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {

ValueEventListener listener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// do your thing here
}

@Override
public void onCancelled(FirebaseError firebaseError) {

}
};
mListenerMap.put(postSnapshot.getRef(), listener);
Firebase childRef = mRef.child("chatRoomMessageCount").child(postSnapshot.getKey());
childRef.addValueEventListener(listener);
}
}

@Override
public void onCancelled(FirebaseError firebaseError) {

}
});
}

@Override
protected void onStop() {
super.onStop();
for (Map.Entry<Firebase, ValueEventListener> entry : mListenerMap.entrySet()) {
Firebase ref = entry.getKey();
ValueEventListener listener = entry.getValue();
ref.removeEventListener(listener);
}
}
}

关于java - 如何在 Android 上的 Firebase 中跟踪听众?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33776195/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com