繁体   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