删除不存在的子代或值时如何防止OnComplete着火

时间:2019-05-06 13:03:07

标签: android firebase firebase-realtime-database

作为标题。即使我删除的孩子不存在,OnCompleteListener也会触发。删除不存在的子级时,如何防止OnComplete(或OnSuccess)火灾?

这是代码:

 ROOT_REF.child("111").removeValue().addOnCompleteListener(new OnCompleteListener<Void>() {
                   @Override
                   public void onComplete(@NonNull Task<Void> task) {
                       Log.d("SSSSSSSSSSSSSSSSSSSS","onComplete");
                   }
               });

注意:子级“ 111”不存在。

1 个答案:

答案 0 :(得分:1)

在服务器上完成设置的状态时,将触发onComplete侦听器。无法更改onComplete侦听器的这种行为。

如果要确保只有一个用户可以删除一个值,并且知道它是当前用户,则应use a transaction。通过事务,您可以根据节点的当前值确定其新值。

ROOT_REF.child("111").runTransaction(new Transaction.Handler() {
    @Override
    public Transaction.Result doTransaction(MutableData mutableData) {
        Object value = mutableData.getValue();
        if (value == null) {
            // Node doesn't exist
            return Transaction.success(mutableData);
        }

        // Remove value and report transaction success
        mutableData.setValue(null);
        return Transaction.success(mutableData);
    }

    @Override
    public void onComplete(DatabaseError databaseError, boolean b,
                           DataSnapshot dataSnapshot) {
        // Transaction completed
        Log.d(TAG, "postTransaction:onComplete:" + databaseError);
    }
});

请注意: