[英]activity gets destroyed after inserting data in firebase
所以我正在创建一个允许先注册的聊天应用程序。 登录后,您会在 ListView 中看到注册用户列表。这是相关的 onclick 代码 -
usersList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
String currentUser = getIntent().getExtras().getString("currUser");
String chatBuddy = adapter.getItem(position);
Intent goChatActivity = new Intent(getApplicationContext(), ChatActivity.class);
goChatActivity.putExtra("currentUser", currentUser);
goChatActivity.putExtra("chatBuddy", chatBuddy);
startActivity(goChatActivity);
}
});
如果您单击一个用户,它会转到 ChatActivity.java,其中当前用户名和您单击的名称列表视图项在 OnCreate() 中分别作为 currentuser 和 chatbuddy 接收。 然后我有并 sendMesg onclick 方法在 firebase 中插入数据,主要是聊天和时间戳-
sendMesg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
final Calendar cal = Calendar.getInstance();
Chat chat = new Chat(chatEditText.getText().toString(), cal.getTime().toString());
databaseReference.child(currentUser+"/"+currentUser+"_"+ chatBuddy).push().setValue(chat);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
我们登录后从列表视图中为每个新的 ChatBuddy 正确插入数据,我们 select 但每次单击 sendMesg,ChatActivity 消失,我 go 回到用户列表,这是我们登录后看到的第一页。 这是演示聊天屏幕记录的链接
Firebase eventListeners(ListenerForSingleValueEvent 除外)在您退出活动后保持运行,直到您使用 removeListener() 将其删除。
如果您对其他活动中的消息使用任何侦听器,它们可能仍在运行。 当您添加一条消息时,他们会尝试更改相关活动的 ui 并且您的应用程序崩溃。
这就是我解决问题的方法。firebase 的注册查询是-
FirebaseDatabase.getInstance().getReference().child("users");
注册后,用户登录并从 userList 中选择一个 chatBuddy 与之聊天 -
聊天插入的 DatabaseReference 是 -
FirebaseDatabase.getInstance().getReference().child("users").child("chats");
这意味着聊天被保存为父节点用户的子节点。 因此,注册用户最后保存的 state 受到一些干扰,因为聊天数据在同一个父节点下。
我必须为 DatabaseReference 进行聊天插入的唯一更改是 -
FirebaseDatabase.getInstance().getReference().child("chats");
也就是说,我从数据库引用中删除了.child("users"),因此聊天已成为所有其他 currentUser_chatBuddy 对的新节点或父节点。 因此不会干扰“用户”父节点上次保存的 state。 因此不再崩溃。 问题解决了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.