2017-07-29 38 views
1

我在数据库火力地堡中的Android不删除节点

enter image description here

有这样的项目,我有删除项目的方法,但不工作,这是方法

public void deleteBag(String bagUid, final FirebaseDeleteBaglListener listener) { 
    Query query = dbReference.child(FirebaseChild.bags.name()).child(bagUid); 
    query.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      dataSnapshot.getRef().setValue(null); 
      listener.notifyBagDeleted(); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 
} 

它得到的参考很好,但方法setValue(null)什么也没做(我也试过removeValues()

我没有得到y例外或某种回应,我希望你能帮助我。

谢谢!

+0

确定的路径是正确的? –

回答

0

我相信你有一个模型类,将你的项目插入到数据库中。 所以你需要做的就是使用该类直接引用对象并对其执行所需的操作。像这样的东西。

public void deleteBag(String bagUid, final FirebaseDeleteBaglListener listener) { 
Query query = dbReference.child(FirebaseChild.bags.name()).child(bagUid); 
query.addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
//This shouldn't be there 
    //dataSnapshot.getRef().setValue(null); 
//instead use the modelclass you used inserting data, to reference the object 
     Modelclass mode = dataSnapshot.getValue(Modelclass.class); 
    /** Note this line indicates the getter and setter method for the particular object that is being referenced**/  
    mode.setItem(null) 
    listener.notifyBagDeleted(); 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 

    } 
}); 

}

+0

** Note **但是如果你想删除节点上的全部内容,那么你只需使用'datasnapshot.setValue(null);'而不是'dataSnapshot.getRef()。setValue(null);'在第六个你的代码行 –

0

当您执行对火力地堡数据库的查询,也将有可能是多个结果。您正在使用ValueEventListener,因此快照包含所有结果的列表。即使只有一个结果,快照也会包含一个结果列表。

您需要循环DataSnapshot.getChildren()得到个别项目符合您查询:

public void deleteBag(String bagUid, final FirebaseDeleteBaglListener listener) { 
    Query query = dbReference.child(FirebaseChild.bags.name()).child(bagUid); 
    query.addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for (DataSnapshot child: dataSnapshot.getChildren()) { 
     child.getRef().removeValue(); 
     } 
     listener.notifyBagDeleted(); 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 
     throw databaseError.toException(); // don't ignore errors 
    } 
    }); 
}