簡體   English   中英

Firebase 刪除值

[英]Firebase Deleting A Value

我正在使用 Firebase 使用 Android Studio 開發應用程序。 我想刪除某個日期,但是當我單擊刪除按鈕時,它什么也不做。 我無法聯系到父母,因為它是生成的密鑰。 任何幫助,將不勝感激。

private void deleteDate(){
    String dateValue = showDate.getText().toString();

    FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
    String userid = user.getUid();

    DatabaseReference usersRef = FirebaseDatabase.getInstance().getReference().child("Users").child(userid).child("smokeFreeDays");

    usersRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull @NotNull DataSnapshot snapshot) {
            for (DataSnapshot userDataSnapshot : snapshot.getChildren()) {
                String date = userDataSnapshot.getValue(String.class);
                if (date.equals(dateValue)) {
                    snapshot.getRef().child(dateValue).removeValue();
                } else if (!date.equals(dateValue)) {
                    snapshot.getRef().child(dateValue).removeValue();
                }
            }
        }

        @Override
        public void onCancelled(@NonNull @NotNull DatabaseError error) {
            Log.w("tag", "loadPost:onCancelled", error.toException());
        }
    });
}

我的數據庫:

在此處輸入圖像描述

請參閱我上面的評論以調試問題。

但作為一個整體提示,我建議重新考慮smokeFreeDays下的數據結構,使其看起來像這樣:

"smokeFreeDays": {
  "2021-05-09": true,
  "2021-05-10": true
}

這種結構的兩個變化:

  • 日期格式現在排序為year-month-day ,更適合查詢。 例如,您可以通過usersRef.orderByKey().startAt("2021-").endAt("2021~")獲得 2021 年的所有無煙日。
  • 我們現在使用日期作為鍵,這意味着我們不再需要加載所有的smokeFreeDays來查找要刪除的值。 一旦知道日期,您現在可以刪除節點: usersRef.child("2021-05-09").removeValue()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM