![](/img/trans.png)
[英]How to resolve infinite loop causing by state change in android compose with firebase authentication
[英]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.addValueEventListener
到query.addListenerForSingleValueEvent
这应该可以解决您的问题
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.