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

时间:2017-09-05 14:49:38

标签: android firebase firebase-realtime-database

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

1 个答案:

答案 0 :(得分:5)

问题是你为数据更改设置了一个监听器,你也改变了它内部的数据(因此它被调用)。

您不需要监听器,只需添加:

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