如何停止Firebase数据库无限循环



我正在创建一个应用程序,并且在用户交互中的一部分。我想在帖子上存储用户评论,但我不想限制任何一个用户可以发表的评论量。我通过将随机数分配为数据库条目的.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

问题是您为数据更改设置了一个侦听器,并且还会更改其中的数据(因此称为)。

您不需要听众,只需添加:

else {
    String uniqueId = UUID.randomUUID().toString();
    commentDB.child(postID)
             .child("Comments")
             .child(uniqueId)
             .setValue(commentInput); 
    commentProgress.dismiss();
}

最新更新