Firebase Database 中的 setValue() 方法不起作用.值未添加到数据库中



我一直在开发一个社交媒体应用程序。我不知道究竟是什么原因造成的,但突然间我的 like 按钮停止了功能,因为该值没有添加到我的数据库中。

另外,我想补充一点,当我在显示单个帖子的 PostDetailActivity 中使用相同的类似代码时,喜欢按钮工作得很好。但是当我在 MainActivity 的一个片段中使用它时,这就是遇到问题的地方。

这是我添加类似内容的代码:

代码来自我的后适配器

databaseReferenceLikes = FirebaseDatabase.getInstance().getReference().child("Likes").child(post.getPostid());
holder.like.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (holder.like.getTag().equals("like")) {
databaseReferenceLikes.runTransaction(new Transaction.Handler() {
@NonNull
@Override
public Transaction.Result doTransaction(@NonNull MutableData mutableData) {
mutableData.child(firebaseUser.getUid()).setValue(true);
return Transaction.success(mutableData);
}
@Override
public void onComplete(@Nullable DatabaseError databaseError, boolean b, @Nullable DataSnapshot dataSnapshot) {
if (b)
addNotification(post.getPublisher(), post.getPostid());
if (databaseError != null)
databaseError.toException().printStackTrace();
}
});
} else {
databaseReferenceLikes.runTransaction(new Transaction.Handler() {
@NonNull
@Override
public Transaction.Result doTransaction(@NonNull MutableData mutableData) {
mutableData.child(firebaseUser.getUid()).setValue(null);
return Transaction.success(mutableData);
}
@Override
public void onComplete(@Nullable DatabaseError databaseError, boolean b, @Nullable DataSnapshot dataSnapshot) {
if (b)
removeNotification(post.getPublisher(), post.getPostid());
if (databaseError != null)
databaseError.toException().printStackTrace();
}
});
}
}
});

除了提要上的最后一个帖子工作正常外,其他所有帖子都不能被喜欢。我尝试删除mLayoutManager.setStackFromEnd((方法,发现现在第一篇文章喜欢按钮功能,其余的则不喜欢。由于为片段内的第一个或最后一个帖子以及PostDetailActivity内部添加了喜欢,因此很明显doTransaction方法正在执行,但setValue方法不会将值添加到数据库中。

RecyclerView recyclerView = view.findViewById(R.id.recycler_view);
recyclerView.setHasFixedSize(false);
LinearLayoutManager mLayoutManager = new LinearLayoutManager(getContext());
mLayoutManager.setReverseLayout(true);
mLayoutManager.setStackFromEnd(true);

谁能解释一下是什么原因造成的?

我没有使用引用变量databaseReferenceLikes,而是使用了火车残骸代码作为该引用,它对我有用。

holder.like.setOnClickListener(view -> {
if (holder.like.getTag().equals("like")) {
FirebaseDatabase.getInstance().getReference().child("Likes").child(post.getPostid()).runTransaction(new Transaction.Handler() {
@NonNull
@Override
public Transaction.Result doTransaction(@NonNull MutableData mutableData) {
mutableData.child(firebaseUser.getUid()).setValue(true);
return Transaction.success(mutableData);
}
@Override
public void onComplete(@Nullable DatabaseError databaseError, boolean b, @Nullable DataSnapshot dataSnapshot) {
if (dataSnapshot != null) // No error has occurred
if (dataSnapshot.hasChild(firebaseUser.getUid())) // Data is present at the location databaseReferenceLikes
if (b) { // Transaction was successfully completed
addNotification(post.getPublisher(), post.getPostid());
}
if (databaseError != null)
databaseError.toException().printStackTrace();
}
});
} else {
FirebaseDatabase.getInstance().getReference().child("Likes").child(post.getPostid()).runTransaction(new Transaction.Handler() {
@NonNull
@Override
public Transaction.Result doTransaction(@NonNull MutableData mutableData) {
mutableData.child(firebaseUser.getUid()).setValue(null);
return Transaction.success(mutableData);
}
@Override
public void onComplete(@Nullable DatabaseError databaseError, boolean b, @Nullable DataSnapshot dataSnapshot) {
if (dataSnapshot != null) // No error has occurred
if (!dataSnapshot.hasChild(firebaseUser.getUid())) // Confirm that data is removed from location databaseReferenceLikes
if (b) // Transaction was successfully completed
removeNotification(post.getPublisher(), post.getPostid());
if (databaseError != null)
databaseError.toException().printStackTrace();
}
});
}
});

问题是数据没有注册到数据库中。好吧,现在它做到了。问题解决了。