Android 来自Firebase的多个removevalue()不工作
我的代码是这样工作的:当我在帖子上,在AlertDialog.Builder上按“ok”时,我会转到: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); } 我回到主要活动,看
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);
}