我正在开发一款使用Firebase的应用。在我的一项活动中,我添加了删除功能。但是,当我删除节点并监视Firebase控制台中的行为时。如何修复基于android的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;
}
});
此代码昨天工作正常。但现在这是一个巨大的问题。所以,如果你弄明白,请帮忙。谢谢。
不知道有关火力地堡太大变化,我会大胆地猜测,要么在'removeValue()'或' notifyDataSetChanged()'产生一个新的'onDataChange()'事件。也许使用['AtomicBoolean'](https://developer.android.com/reference/java/util/concurrent/atomic/AtomicBoolean.html)来检测重新进入? –