社交应用:评论互相替换

问题描述 投票:0回答:1

我正在使用 android studio 和 java 创建一个社交网络应用程序。

我的问题是应用程序评论部分的评论功能。每当用户尝试发表评论时,他之前的评论就会被新的评论取代。

这是我认为有问题的代码。我还在

push()
数据库参考的末尾添加了
PostsRef
方法,但注释仍然在相互替换。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_comments);

    Post_key = getIntent().getExtras().get("PostKey").toString();
    PostsRef = FirebaseDatabase.getInstance().getReference().child("Posts").child(Post_key).child("comments").push();
    String comment_push_id = PostsRef.getKey();

    mAuth = FirebaseAuth.getInstance();
    current_user_id = mAuth.getCurrentUser().getUid();

    UsersRef = FirebaseDatabase.getInstance().getReference().child("Users");

    CommentsList = findViewById(R.id.comments_list);
    CommentsList.setHasFixedSize(true);
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
    linearLayoutManager.setReverseLayout(true);
    linearLayoutManager.setStackFromEnd(true);
    CommentsList.setLayoutManager(linearLayoutManager);

这是可能有用的代码的相关部分 -

PostCommentButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        UsersRef.child(current_user_id).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                if(snapshot.exists())
                {
                    String userName = snapshot.child("username").getValue().toString();
                    ValidateComment(userName);

                    CommentInputText.setText("");
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {
            }
        });
    }
});

这是用户将注释插入 firebase 数据库的代码部分 -

private void ValidateComment(String userName) {
    String commentText = CommentInputText.getText().toString();

    if(TextUtils.isEmpty(commentText))
    {
        Toast.makeText(this,"Please write text to comment...",Toast.LENGTH_LONG).show();
    }
    else
    {
        Calendar callForDate = Calendar.getInstance();
        SimpleDateFormat currentDate = new SimpleDateFormat("dd-MMMM-yyyy");
        final String saveCurrentDate = currentDate.format(callForDate.getTime());

        Calendar callForTime = Calendar.getInstance();
        SimpleDateFormat currentTime = new SimpleDateFormat("HH:mm");
        final String saveCurrentTime = currentTime.format(callForDate.getTime());

        final String RandomKey = current_user_id + saveCurrentDate + saveCurrentTime;

        HashMap commentsMap = new HashMap();
        commentsMap.put("uid",current_user_id);
        commentsMap.put("comment",commentText);
        commentsMap.put("date",saveCurrentDate);
        commentsMap.put("time",saveCurrentTime);
        commentsMap.put("username",userName);
       PostsRef.child(RandomKey).updateChildren(commentsMap).addOnCompleteListener(new OnCompleteListener() {
           @Override
           public void onComplete(@NonNull Task task) {
               if(task.isSuccessful())
               {
                   Toast.makeText(CommentsActivity.this,"comment posted successfully....",Toast.LENGTH_LONG).show();
               }
               else
               {
                   Toast.makeText(CommentsActivity.this,"Error Occured, Try Again...",Toast.LENGTH_LONG).show();
               }
           }
       });
    }
}

在数据库中,也有一些评论没有被存储,而只有替换的评论被存储。

java android firebase firebase-realtime-database
1个回答
0
投票

我通过使用 getKey() 获取密钥后调用 .setValue() 方法解决了这个问题;

PostsRef = FirebaseDatabase.getInstance().getReference().child("帖子").child(Post_key).child("评论").push(); String comment_push_id = PostsRef.getKey(); PostsRef.setValue(comment_push_id);

© www.soinside.com 2019 - 2024. All rights reserved.