我正在開發一款使用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)來檢測重新進入? –