2017-10-16 51 views
0

我已遵循this。但不幸的是,当我删除一个具有SAME值的数据作为另一个时,它也会被删除。我只想删除单个数据。从Firebase数据库中删除特定值

这里是我的数据库结构。 Here is my database

我想只删除只有一个值。

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) { 

          } 
         }); 

我有这样的代码

任何机会,你们有一个想法?我认为最好的方法是获取患者的ID并删除该数据,因为ID是唯一的。任何帮助感谢!

+0

你可以给节点要在给定的图片删除其中一个例子吗? –

+0

例如我要删除,Dummy1 @BurhanuddinRashid –

回答

6

先获取该值,然后将其删除。 ,如果你不知道该对象所有你需要做的就是查询的键,然后用得到的是getKey() method对象键从DataSnapshotpostsnapshot.getKey()

或检查出我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

我将如何获取UID? –

+0

private String uId = FirebaseAuth.getInstance()。getCurrentUser(); –

+0

String键= postsnapshot.getKey();使用和获取的对象@KyleAnthonyDizon –

0

您可以删除Dummy1通过下面的代码:

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

我已经给出了例子来告诉你如何需要tranverse树删除节点“Dummy1”用户名

如果你不” t知道要删除的项的关键,您将首先需要查询数据库以确定这些密钥:

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

我将如何获得此密钥? .child(“ - KwYUqs ...键”) –

+0

检查我的更新答案 –

+0

但我有2个数据与“Dummy1”同“姓”,他们都会被删除? –

0

你筛选查询是错误的... 和删除患者/ NODEID/patient_id /地址设置为null