簡體   English   中英

在 firebase 中插入數據后,活動被破壞

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM