我正在创建一个应用程序,并在用户交互中创建其中一部分功能。我想在帖子上存储用户评论,我不想限制任何一个用户可以发表的评论数量。我这样做是通过将随机数分配为数据库条目的.setValue
。
通过这种实现,每当评论被发送到数据库时,它就会陷入无限循环,在那里它会不断地使用在文本框中输入的相同字符串进行更新,但它会不断生成新帖子。 完整代码;
sendComment.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
commitPost();
finish();
}
});
}
private void commitPost() {
commentProgress.setMessage("Posting");
commentProgress.show();
final String commentInput = commentText.getText().toString().trim();
if(TextUtils.isEmpty(commentInput)){
Snackbar.make(commentLayout,"You haven't finished your post yet",Snackbar.LENGTH_SHORT);
}else{
commentDB.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String uniqueId = UUID.randomUUID().toString();
commentDB.child(postID).child("Comments").child(uniqueId).setValue(commentInput);
commentProgress.dismiss();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
问题在于commentDB.addValueEventListener
答案 0 :(得分:5)
问题是你为数据更改设置了一个监听器,你也改变了它内部的数据(因此它被调用)。
您不需要监听器,只需添加:
else {
String uniqueId = UUID.randomUUID().toString();
commentDB.child(postID)
.child("Comments")
.child(uniqueId)
.setValue(commentInput);
commentProgress.dismiss();
}