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

标签 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

最佳答案

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

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

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

关于android - 如何停止 Firebase 数据库无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46057882/

相关文章:

仅适用于沙盒的 iOS Firebase 推送通知

javascript - 如何解决Angular数据服务功能错误?

android - 如何在不使用 orderBy 两次的情况下构建查询来检索有序列表?

android - 如何从Android中的资源目录播放音频文件

android - 多个 Activity 上的相同按钮

javascript - 使用vuejs加载页面时如何从firebase获取数据?

javascript - Firebase - 使用 equalTo 进行深度查询 orderByChild

android - 更改位图的样本大小

android - 我的 React Native 应用程序卡在加载循环中

android - FCM 后台通知适用于 Android;不在 iOS 中