【发布时间】:2026-02-20 11:30:01
【问题描述】:
在我的项目中,Firebase 中有两个数据库。一个是通用数据库,名为BlogPosts,用于所有帖子,一个名为UserPosts,用于在特定用户下过滤的帖子。从BlogPosts 我可以获得必要的数据,以便我可以转到UserPosts 中的特定帖子(我已经在我在这里添加的文档中完成了)。我想创建一个系统,以便从主页(检索到BlogPosts)删除一些帖子时,它将从Firebase数据库中删除BlogPosts和UserPosts中的数据。但是每次我运行我的应用程序并尝试删除一些帖子时,系统都会崩溃。
这是我的具体代码:
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot.exists())
{
//get the profile id from BlogPosts post so that we can reach the same post in Userposts
String profileid = dataSnapshot.child("ProfileId").getValue().toString();
profiledb = FirebaseDatabase.getInstance()
.getReference().child("UserPosts").child(id).child(profileid);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
}) ;
profiledb.removeValue().addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
databaseReference.removeValue().addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
ProfileFragment prf = new ProfileFragment();
android.support.v4.app.FragmentTransaction fragmentTransaction =getFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.fragment_container, prf).commit();
}
});
}
});
错误如下:
java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.android.gms.tasks.Task com.google.firebase.database.DatabaseReference.removeValue()' on a null object reference
at com.example.zub.projectFirebase.SinglePostFragment$2$4$1.onMenuItemClick(SinglePostFragment.java:327)
【问题讨论】:
-
databaseReference 是对 BlogPosts 数据库中文章的引用。
-
您必须为所有交易提供不同的数据库参考
-
请解释一下。
-
查看我提供的答案。将用于删除
profiledb的代码放入您获得其数据库引用的位置。这样,它将在删除之前首先获得引用。你错的地方是以不同的方式运行代码。在第一个事务太重而无法加载的情况下,它将继续处理其他事务,并使 db ref 为空,因为它在尝试另一个事务之前没有完成 -
您在哪一行代码出现此错误?请回复@。
标签: android firebase firebase-realtime-database nullpointerexception