Не получается уникальный идентификатор, сгенерированный базой данных Firebase - PullRequest
0 голосов
/ 16 апреля 2020

Это код, который предназначен для удаления постукулярного поста ... Вот что я делаю, когда пользователь нажимает кнопку удаления, пост должен быть удален, но при этом должен быть гарантирован, что ничего не удаляется. Также, когда я ставлю лог чтобы проверить, получаю ли я уникальный идентификатор, сгенерированный базой данных firebase, он показывает следующее:

'2020-04-16 10: 00: 41.328 29431-29431 / com.example.zone D / sanyam: MBlog'

Моя база данных Firebase выглядит следующим образом (я хочу удалить этот уникальный идентификатор)

MBlog
-M4iN100Ic5TiSjRRTtX
-M4iNkUGOCd7aKSqg09q
-M4mco3s-nEo0ohXYwIm
-M4xzHyoJjE0QY-5cKeZ
   ``` 

    //delete button
 ```      holder.button.setOnClickListener(new View.OnClickListener() {
        @Override
          public void onClick(View v) {

            mPostDatabase = FirebaseDatabase.getInstance().getReference().child("MBlog"); //child name must be same otherwise the
            //DatabaseReference newPost = mPostDatabase.getRef();
            mPostDatabase.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                    String uid = mPostDatabase.getKey();

                    Log.d("sanyam",uid);
                    mPostDatabase.child(uid).removeValue();
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }
            });
        }
        });

  }```

Ответы [ 2 ]

0 голосов
/ 16 апреля 2020

Если вы хотите удалить все это значение одновременно

mPostDatabase = FirebaseDatabase.getInstance().getReference().child("MBlog");
mPostDatabase.removeValue();

, но если вы хотите удалить определенный узел / ref

holder.button.setOnClickListener(new View.OnClickListener() {
        @Override
          public void onClick(View v) {

            mPostDatabase = FirebaseDatabase.getInstance().getReference().child("MBlog"); //child name must be same otherwise the
            //DatabaseReference newPost = mPostDatabase.getRef();
            mPostDatabase.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                  if(dataSnapshot.exists()){
                    String uid = dataSnapshot.getKey();
                    Log.d("sanyam",uid);
                    if(uid.equal("M4mco3s-nEo0ohXYwIm")){//Here you can check UID
                        removeDataRef(dataSnapshot.getRef())
                       }

                     }
                        //mPostDatabase.child(uid).removeValue();
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }
            });
        }
        });

И если вы хотите получить обратный вызов удаления полный здесь слушатель

 public void removeDataRef(DatabaseReference ref){
ref.removeValue(new DatabaseReference.CompletionListener() {
            @Override
            public void onComplete(@Nullable DatabaseError databaseError, @NonNull DatabaseReference databaseReference) {
                //Here you can check the operation of remove completed or not
            }
        });

}

0 голосов
/ 16 апреля 2020

dataSnapshot - все еще список. Чтобы получить доступ к элементу, вам нужно l oop над результатом:

@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
   for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
        String uid = snapshot.getKey();
        Log.d("sanyam",uid);
        mPostDatabase.child(uid).removeValue();                 
   }
}

Но если вы выполните этот запрос, все элементы будут удалены.

Если вы хотите удалить один элемент, вы можете сделать это так:

 mPostDatabase = FirebaseDatabase.getInstance().getReference().child("MBlog").child(uid);
 mPostDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
      @Override
      public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

      if(dataSnapshot.exists()){
          String uid = dataSnapshot.getKey();
          Log.d("sanyam",uid);
          mPostDatabase.removeValue();
      }

      }

      @Override
      public void onCancelled(@NonNull DatabaseError databaseError) {

      }
 });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...