[英]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.