从Firebase - Java中删除共享同一孩子的多个数据

问题描述 投票:0回答:1

我有以下Firebase数据库

课程:

      Id_lesson : "XXX1"
      Name_lesson : "Geography"
      Date_lesson : "25/09/2018"

      Id_lesson : "XXX2"
      Name_lesson : "Mathematics"
      Date_lesson : "25/09/2018"

      Id_lesson : "XXX1"
      Name_lesson : "Physics"
      Date_lesson : "26/09/2018"

      Id_lesson : "XXX2"
      Name_lesson : "Biology"
      Date_lesson : "26/09/2018"

我需要删除特定日期的所有课程条目(共享相同的Date_lesson子项)。

我试过这个方法:

private void Delete_CR_Lessons(Date date) {

    final String date_to_delete_string = DateFormat.getDateInstance(DateFormat.SHORT).format(date);
    Log.i("Tag", "date to delete : "+date_to_delete_string);

    DatabaseReference drTest = FirebaseDatabase.getInstance().getReference();

    drTest.child("lessons").addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot snapshot) {
            for(DataSnapshot dataSnapshot:snapshot.getChildren()) {
                Log.i("Tag", "iteration for dataSnap");
                if(dataSnapshot.hasChild(date_to_delete_string)){
                    dataSnapshot.getRef().setValue(null);
                }
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Log.w("TAG: ", databaseError.getMessage());
        }
    });

在执行该方法期间(例如,使用字符串日期“25/09/2018”),不会从Firebase数据库中删除这些条目。我看到我指定的两个日志,但我也看到了一个名为的日志

“我/ chatty:uid = 10298(com.example.myname.lessonsmanagment)相同的2行”

我想这个方法不起作用,因为它无法在同一时间检测到日期25/09/2018(地理和数学)的两个课程。

有没有人知道如何使它工作?

java android
1个回答
0
投票

首先,您需要使用日期查询/订购数据

您只需使用此示例即可。

mRef.child("lessons").orderByKey().equalTo(Date_lesson)
.addListenerForSingleValueEvent(new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot dataSnapshot) {

  for (DataSnapshot postsnapshot :dataSnapshot.getChildren()) {
    String key = postsnapshot.getKey();
    dataSnapshot.getRef().removeValue(); 
 }
});

在哪里mRefis你lessons分支参考

© www.soinside.com 2019 - 2024. All rights reserved.