我正在使用 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();
}
}
});
}
}
在数据库中,也有一些评论没有被存储,而只有替换的评论被存储。
我通过使用 getKey() 获取密钥后调用 .setValue() 方法解决了这个问题;
PostsRef = FirebaseDatabase.getInstance().getReference().child("帖子").child(Post_key).child("评论").push(); String comment_push_id = PostsRef.getKey(); PostsRef.setValue(comment_push_id);