Java 未打开包含的活动时,将对我的firebase addvalueeventlistener执行操作 私有FirebaseAuth mAuth; 私有查询getChatsList; 私有值EventListener GetChatsListener; 私人适配卡列表适配卡列表; 私有列表提供者指南; 私人名单提供者姓名; 私人回收视图聊天室回收视图; @凌驾 创建时受保护的void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity\u chats\u列表); mAuth=FirebaseAuth.getInstance(); providerUids=新的ArrayList(); providerNames=新的ArrayList(); ChatsRecycleView=findViewById(R.id.ChatsRecycleView); LinearLayoutManager layoutManager=新的LinearLayoutManager(ChatsListActivity.this); layoutManager.setStackFromEnd(true); layoutManager.setReverseLayout(true); setLayoutManager(layoutManager); getChatsList=FirebaseDatabase.getInstance().getReference(“用户”).child(mAuth.getCurrentUser().getUid()).child(“聊天”).orderByChild(“详细信息/lastInteraction”); GetChatsListener=新值EventListener(){ @凌驾 public void onDataChange(@NonNull DataSnapshot DataSnapshot){ providerUids.clear();providerNames.clear(); 对于(DataSnapshot ds:DataSnapshot.getChildren()){ 字符串providerUid=ds.getKey(); String providerName=ds.child(“详细信息”).child(“对立名称”).getValue(String.class); providerUid.add(providerUid); providerName.add(providerName); adapterChatsList=新的adapterChatsList(ChatsListActivity.this、providerUids、providerNames); adapterChatsList.notifyDataSetChanged(); chatsRecyclerView.setAdapter(adapterChatsList); } } @凌驾 已取消的公共void(@NonNull DatabaseError DatabaseError){ } }; } @凌驾 受保护的void onStart(){ super.onStart(); getChatsList.addValueEventListener(GetChatsListener); } @凌驾 受保护的void onStop(){ super.onStop(); 如果(GetChatsListener!=null){ getChatsList.removeEventListener(GetChatsListener); } }
未打开包含的活动时,将对我的firebase addvalueeventlistener执行操作。我打开应用程序的主页活动,其中有一个按钮链接到被质疑的活动。如果firebase发生更改,则home活动将刷新。如果我已打开包含值event listener的活动,并且发生firebase更改,则该活动将关闭,应用程序将返回到主活动。我已经在onStart()中为数据库引用设置了事件侦听器,并且正在onStop()中删除它。我能做什么?使用Java 未打开包含的活动时,将对我的firebase addvalueeventlistener执行操作 私有FirebaseAuth mAuth; 私有查询getChatsList; 私有值EventListener GetChatsListener; 私人适配卡列表适配卡列表; 私有列表提供者指南; 私人名单提供者姓名; 私人回收视图聊天室回收视图; @凌驾 创建时受保护的void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity\u chats\u列表); mAuth=FirebaseAuth.getInstance(); providerUids=新的ArrayList(); providerNames=新的ArrayList(); ChatsRecycleView=findViewById(R.id.ChatsRecycleView); LinearLayoutManager layoutManager=新的LinearLayoutManager(ChatsListActivity.this); layoutManager.setStackFromEnd(true); layoutManager.setReverseLayout(true); setLayoutManager(layoutManager); getChatsList=FirebaseDatabase.getInstance().getReference(“用户”).child(mAuth.getCurrentUser().getUid()).child(“聊天”).orderByChild(“详细信息/lastInteraction”); GetChatsListener=新值EventListener(){ @凌驾 public void onDataChange(@NonNull DataSnapshot DataSnapshot){ providerUids.clear();providerNames.clear(); 对于(DataSnapshot ds:DataSnapshot.getChildren()){ 字符串providerUid=ds.getKey(); String providerName=ds.child(“详细信息”).child(“对立名称”).getValue(String.class); providerUid.add(providerUid); providerName.add(providerName); adapterChatsList=新的adapterChatsList(ChatsListActivity.this、providerUids、providerNames); adapterChatsList.notifyDataSetChanged(); chatsRecyclerView.setAdapter(adapterChatsList); } } @凌驾 已取消的公共void(@NonNull DatabaseError DatabaseError){ } }; } @凌驾 受保护的void onStart(){ super.onStart(); getChatsList.addValueEventListener(GetChatsListener); } @凌驾 受保护的void onStop(){ super.onStop(); 如果(GetChatsListener!=null){ getChatsList.removeEventListener(GetChatsListener); } },java,android,firebase,firebase-realtime-database,android-lifecycle,Java,Android,Firebase,Firebase Realtime Database,Android Lifecycle,未打开包含的活动时,将对我的firebase addvalueeventlistener执行操作。我打开应用程序的主页活动,其中有一个按钮链接到被质疑的活动。如果firebase发生更改,则home活动将刷新。如果我已打开包含值event listener的活动,并且发生firebase更改,则该活动将关闭,应用程序将返回到主活动。我已经在onStart()中为数据库引用设置了事件侦听器,并且正在onStop()中删除它。我能做什么?使用addChildEventListener,其中的函数应该
addChildEventListener
,其中的函数应该是什么(onChildeded或)它不再工作。使用子侦听器对这个问题没有影响。乍一看,代码看起来是正确的,不过您可能需要检查是否实际调用了您的桌面
。如果没有,请考虑在<代码> OnpPosie中删除侦听器。我可以想到的问题可能是由这行引起的。代码> FiBaseDATABASE。GETSimSee()。GETRebug(“用户”)。子(Muth.GeCurrutUsServer)…它认为你应该创建一个根ref或ref到用户
节点,然后像下面的userRef.child(uid.child)(“chat”)那样向该节点添加子节点。
private FirebaseAuth mAuth;
private Query getChatsList;
private ValueEventListener getChatsListEventListener;
private AdapterChatsList adapterChatsList;
private List<String> providerUids;
private List<String> providerNames;
private RecyclerView chatsRecyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chats_list);
mAuth = FirebaseAuth.getInstance();
providerUids = new ArrayList<>();
providerNames = new ArrayList<>();
chatsRecyclerView = findViewById(R.id.chatsRecyclerView);
LinearLayoutManager layoutManager = new LinearLayoutManager(ChatsListActivity.this);
layoutManager.setStackFromEnd(true);
layoutManager.setReverseLayout(true);
chatsRecyclerView.setLayoutManager(layoutManager);
getChatsList = FirebaseDatabase.getInstance().getReference("Users").child(mAuth.getCurrentUser().getUid()).child("Chats").orderByChild("details/lastInteraction");
getChatsListEventListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
providerUids.clear(); providerNames.clear();
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String providerUid = ds.getKey();
String providerName = ds.child("details").child("oppositeName").getValue(String.class);
providerUids.add(providerUid);
providerNames.add(providerName);
adapterChatsList = new AdapterChatsList(ChatsListActivity.this, providerUids, providerNames);
adapterChatsList.notifyDataSetChanged();
chatsRecyclerView.setAdapter(adapterChatsList);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
};
}
@Override
protected void onStart() {
super.onStart();
getChatsList.addValueEventListener(getChatsListEventListener);
}
@Override
protected void onStop() {
super.onStop();
if(getChatsListEventListener != null) {
getChatsList.removeEventListener(getChatsListEventListener);
}
}