簡體   English   中英

如何在刪除導致無限循環的對象時修復基於Android的Firebase錯誤?

[英]How to fix android based Firebase error while deleting objects causing an infinite loop?

我正在使用Firebase開發應用程序。 在我的一項活動中,我添加了刪除功能。 但是,當我刪除節點並在Firebase控制台中監視行為時。

首先,它刪除對象,再添加2個對象。 然后刪除2,再增加3-4。 此操作持續到設備變得不穩定(陷入無限循環)的程度。 該應用程序導致屏幕完全變黑。 什么都沒有。 Logcat顯示“有太多輸出要處理”。 導航按鈕將用戶帶回不穩定的應用程序。

它不會卸載。 唯一的解決方案是強制重新啟動它。 用於執行此操作的代碼是

mChatsListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, long id) {
            chatToDelete = ((TextView) view.findViewById(R.id.sender_roll_text_view)).getText().toString().trim();
            final AlertDialog.Builder builder = new AlertDialog.Builder(ChatsActivity.this);
            builder.setMessage("Delete Chat?").setPositiveButton("Delete", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Query query = mDatabaseReference.orderByChild("roll").equalTo(chatToDelete);
                    query.addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
                            for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
                                dataSnapshot1.getRef().removeValue();
                                chats.remove(position);
                                mChatsAdapter.notifyDataSetChanged();
                            }
                        }

                        @Override
                        public void onCancelled(DatabaseError databaseError) {}
                    });
                }
            }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            });
            builder.show();
            return true;
        }
    });

這段代碼昨天才運行良好。 但是現在這是一個巨大的問題。 因此,如果您發現問題,請提供幫助。 謝謝。

我認為這是因為您使用addValueEventListener而不是addListenerForSingleValueEvent 通過使用addValueEventListener ,每次更改數據庫時都會觸發onDataChange

onClick請從

query.addValueEventListenerquery.addListenerForSingleValueEvent

這應該可以解決您的問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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