2017-10-16 2 views
0

J'ai déjà suivi this. Mais malheureusement, lorsque je supprime une donnée avec la même valeur que l'autre, elle est également supprimée. Je veux supprimer une seule donnée.Supprimer une valeur spécifique de la base de données Firebase

Voici ma structure de base de données. Here is my database.

Je souhaite supprimer uniquement une seule valeur.

Query query = databaseReference.orderByChild("address").equalTo(tvPatientAddress.getText().toString()); 

         query.addChildEventListener(new ChildEventListener() { 
          @Override 
          public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
           dataSnapshot.getRef().setValue(null); 
          } 

          @Override 
          public void onChildChanged(DataSnapshot dataSnapshot, String s) { 

          } 

          @Override 
          public void onChildRemoved(DataSnapshot dataSnapshot) { 

          } 

          @Override 
          public void onChildMoved(DataSnapshot dataSnapshot, String s) { 

          } 

          @Override 
          public void onCancelled(DatabaseError databaseError) { 

          } 
         }); 

J'ai ce code

Toute chance avez une idée que vous les gars? Je pense que la meilleure façon de le faire est d'obtenir l'ID du patient et de supprimer ces données, car l'ID est unique. Toute aide appréciée!

+0

Vous pouvez donner un exemple du nœud que vous souhaitez supprimer dans une image donnée? –

+0

Par exemple je veux supprimer, Dummy1 @BurhanuddinRashid –

Répondre

6

obtenir cette valeur d'abord, puis retirez-le.! et si vous ne connaissez pas la clé de cet objet tout ce que vous avez à faire est la requête et obtenir cette clé d'objet à partir DataSnapshot en utilisant getKey() method comme postsnapshot.getKey()

ou consulter mon Firebase Helper Class Tutorial

mdatabaseReference.child("users").orderByKey().equalTo(uid).addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 

    for (DataSnapshot postsnapshot :dataSnapshot.getChildren()) { 

    String key = postsnapshot.getKey(); 
    dataSnapshot.getRef().removeValue(); 

} 
+0

Comment vais-je obtenir l'UID? –

+0

private Chaîne uId = FirebaseAuth.getInstance(). GetCurrentUser(); –

+0

String key = postsnapshot.getKey(); utilisez ceci et obtenez la clé de l'objet @KyleAnthonyDizon –

0

Vous pouvez supprimer dummy1 par code suivant:

FirebaseDatabase.getInstance().getReference("dentist-ass-key") 
.child("Patients") 
.child("91C...key") 
.child("-KwYUqs...key") 
.child("firstname") 
.removeValue(); 

J'ai donné l'exemple pour montrer comment vous devez Transverse un arbre pour supprimer un noeud « dummy1 » nom d'utilisateur

Si vous n » sais la clé des éléments à supprimer, vous devez d'abord interroger la base de données pour déterminer les clés:

DatabaseReference ref = FirebaseDatabase.getInstance().getReference("dentist-ass-key"); 
Query dummyQuery = ref 
    .child("Patients") 
    .child("91C...key") 
    .orderByChild("firstname") 
    .equalTo("Dummy1"); 

dummyQuery.addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for (DataSnapshot dummySnapshot: dataSnapshot.getChildren()) { 
      dummySnapshot.getRef().removeValue(); 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 
     Log.e(TAG, "onCancelled", databaseError.toException()); 
    } 
}); 
+0

Comment vais-je obtenir cette clé? .child ("- KwYUqs ... key") –

+0

Vérifiez ma mise à jour –

+0

Mais j'ai 2 données avec le même "prénom" de "Dummy1", ils seront tous les deux supprimés? –

0

Votre la requête de filtre est erronée ... et pour supprimer Patients/nodeid/patient_id/adresse défini sur null