Android 来自Firebase的多个removevalue()不工作

Android 来自Firebase的多个removevalue()不工作,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我的代码是这样工作的:当我在帖子上,在AlertDialog.Builder上按“ok”时,我会转到: private void borrar_post(){ Intent intent = new Intent(PostDetailActivity.this, MainActivity.class); intent.putExtra("EXTRA_BORRAR_POST", mPostKey); startActivity(intent); } 我回到主要活动,看

我的代码是这样工作的:当我在帖子上,在AlertDialog.Builder上按“ok”时,我会转到:

private void borrar_post(){

    Intent intent = new Intent(PostDetailActivity.this, MainActivity.class);
    intent.putExtra("EXTRA_BORRAR_POST", mPostKey);
    startActivity(intent);

}
我回到主要活动,看看是否有需要删除的内容:

String borrar = getIntent().getStringExtra("EXTRA_BORRAR_POST");

    if (borrar != null) {

        DatabaseReference mipost = FirebaseDatabase.getInstance().getReference();

        mipost.child("user-posts").child(getUid()).child(borrar).removeValue();

        mipost.child("posts").child(borrar).removeValue();

        mipost.child("post-comments").child(borrar).removeValue();

    }
我从firebase实时数据库中的3个位置删除我的帖子。这棵树是:

有可能我在“发表评论”上没有任何内容,所以我知道我可能有问题(也许我应该检查一下之前是否有问题),但即使我在评论这一行时,我仍然有同样的问题:

有时删除所有内容,有时什么都不删除,大多数情况下只有“用户帖子”子项被删除


我知道我也有类似的问题,但我似乎找不到错误,有什么帮助吗?

您是否有安全规则将写访问限制为某个位置当前值的函数?这或许可以解释为什么有些迁移成功,而有些迁移失败

若要了解对
removeValue()
的某些调用失败的原因,请添加一个。您可以将调试侦听器定义为活动中的字段,如下所示:

private DatabaseReference.CompletionListener mRemoveListener =
        new DatabaseReference.CompletionListener() {
    @Override
    public void onComplete(DatabaseError error, DatabaseReference ref) {
        if (error == null) {
            Log.d(TAG, "Removed: " + ref);
            // or you can use:
            System.out.println("Removed: " + ref);
        } else {
            Log.e(TAG, "Remove of " + ref + " failed: " + error.getMessage());
        }
    }
};
然后将其添加到对
removeValue()
的每个调用中:


我会试试,但关于“限制写访问的安全规则是某个位置当前值的函数”,我想我还没有。。。该如何实施?使用互斥锁?可能是来自firebase的某些内容?我尝试以这种方式删除它2篇帖子,但我只收到“borrar=”消息,然后它在从remove listener获取任何日志之前崩溃:发布崩溃的日志输出。应该有堆栈跟踪或异常消息。这是一个很好的方法,因为它显示了必须删除的完整节点地址
String borrar = getIntent().getStringExtra("EXTRA_BORRAR_POST");

if (borrar != null) {
    // always good to log important values
    Log.d(TAG, "borrar= " + borrar);

    DatabaseReference mipost = FirebaseDatabase.getInstance().getReference();

    mipost.child("user-posts").child(getUid()).child(borrar).removeValue(mRemoveListener);

    mipost.child("posts").child(borrar).removeValue(mRemoveListener);

    mipost.child("post-comments").child(borrar).removeValue(mRemoveListener);
}