[英]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.