Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 表示“喜欢”和“不喜欢”的ImageView不会更改颜色,也不会在Firebase中创建新节点_Java_Android_Json - Fatal编程技术网

Java 表示“喜欢”和“不喜欢”的ImageView不会更改颜色,也不会在Firebase中创建新节点

Java 表示“喜欢”和“不喜欢”的ImageView不会更改颜色,也不会在Firebase中创建新节点,java,android,json,Java,Android,Json,我想在我的项目中加入一个喜欢的和不喜欢的ImageView,就像Youtube在评论部分所做的那样。选择后,它们将颜色从黑色变为红色,并且只能选择一种。你不能喜欢或不喜欢一个评论,显然,它必须是一个或另一个 我目前拥有Firebase的方式如下:当有人在帖子上发表评论时,评论会被保存,JSON看起来是这样的comments>PostId>CommentId>Publisher,Comment,CommentId。我想检查commentId是否存在,如果存在,那么我想在根节点下创建一个新节点,如下

我想在我的项目中加入一个喜欢的不喜欢的
ImageView
,就像Youtube在评论部分所做的那样。选择后,它们将颜色从黑色变为红色,并且只能选择一种。你不能喜欢或不喜欢一个评论,显然,它必须是一个或另一个

我目前拥有Firebase的方式如下:当有人在帖子上发表评论时,评论会被保存,JSON看起来是这样的
comments>PostId>CommentId>Publisher,Comment,CommentId
。我想检查
commentId
是否存在,如果存在,那么我想在根节点下创建一个新节点,如下所示:
Comments Likes Dislikes>commentId>Likes,Dislikes>UserId:true
(取决于他们选择的likedislike

我的代码没有像
那样将变为红色,也没有创建新节点。不确定我在这里缺少了什么。有人能告诉我,我对这一点的想法是否正确,以及我的代码中的错误,为什么
ImageView
没有从黑色变为红色k

不知道为什么我在这件事上有这么多麻烦…我是不是在想逻辑错误?有没有更好的办法

CommentAdapter

@Override


   public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {

        mFirebaseUser = FirebaseAuth.getInstance().getCurrentUser();
        final Comment comment = mComment.get(position);

        commentLike(holder.commentLike);

        holder.commentLike.setOnClickListener(v -> {
            if (holder.commentLike.getTag().equals("like")) {
                FirebaseDatabase.getInstance().getReference().child("Comment Likes Dislikes")
                        .child(comment.getCommentid()).child("Likes").child(mFirebaseUser.getUid()).setValue(true);
            } else {
                FirebaseDatabase.getInstance().getReference().child("Comment Likes Dislikes")
                        .child(comment.getCommentid()).child("Likes").child(mFirebaseUser.getUid()).removeValue();
            }
        });

 public static class ViewHolder extends RecyclerView.ViewHolder {

        ImageView commentLike;

        ViewHolder(@NonNull View itemView) {
            super(itemView);

            commentLike = itemView.findViewById(R.id.icon_thumb_up_black);
        }
    }

 private void commentLike(ImageView imageView) {
        DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("Comments").child(postid);
        reference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                Comment comment = dataSnapshot.getValue(Comment.class);
                if (comment != null) {
                    if (dataSnapshot.child(comment.getCommentid()).exists()) {
                        imageView.setImageResource(R.drawable.ic_thumb_up_red);
                        imageView.setTag("liked");
                    } else {
                        imageView.setImageResource(R.drawable.ic_thumb_up_black);
                        imageView.setTag("like");
                    }
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
    }
这是我的建议

将根节点下的节点命名为“Likes\u Dislikes”。每当用户喜欢或不喜欢注释时,将“Likes\u Dislikes”下的另一个节点作为注释id。 在该节点下,创建两个名为“喜欢”和“不喜欢”的节点,并根据其操作将用户id放在该节点下

总而言之,您的数据库结构应该如下所示

我为什么要提出这个建议?

正如您所见,Fire base会在引用父节点时下载所有子节点。这意味着,当您的评论的喜欢/不喜欢增加时,您的单个评论节点会增加。想象一下,一篇文章有120条评论,每个评论都有120条喜欢和不喜欢的内容,加载速度会变慢

因此,最好将好恶记录到另一个单独的节点中。 让我知道你的想法。

这是我的建议

将根节点下的节点命名为“Likes\u Dislikes”。每当用户喜欢或不喜欢注释时,将“Likes\u Dislikes”下的另一个节点作为注释id。 在该节点下,创建两个名为“喜欢”和“不喜欢”的节点,并根据其操作将用户id放在该节点下

总而言之,您的数据库结构应该如下所示

我为什么要提出这个建议?

正如您所见,Fire base会在引用父节点时下载所有子节点。这意味着,当您的评论的喜欢/不喜欢增加时,您的单个评论节点会增加。想象一下,一篇文章有120条评论,每个评论都有120条喜欢和不喜欢的内容,加载速度会变慢

因此,最好将好恶记录到另一个单独的节点中。
让我知道你的想法。

我上传了代码,但仍然没有得到正确的结果。正在创建“喜欢不喜欢的评论”节点,其结构为
喜欢的评论>喜欢的评论>喜欢的评论>用户ID:true
,但是如果我不喜欢该评论,则该值不会被删除……我做错了什么?你仍然面临着问题吗问题?我成功了,兄弟,非常感谢。你帮了很多忙:)一件事,我上传了另一个问题,因为我想如果用户点击了喜欢的图像视图,他就不能同时点击不喜欢的图像视图。他只能选择其中一个。如果他选择了一个,另一个就不选择自己。也许你知道我该怎么做?让我看看我上传的代码,但我仍然没有得到正确的结果。正在创建Comment Likes Dislikes节点,其结构为
Comment Likes Dislikes>CommentId>Likes>UserId:true
,但如果我不喜欢该注释,则不会删除该值。。。我做错了什么?你还面临这个问题吗?我成功了,兄弟,非常感谢。你帮了很多忙:)一件事,我上传了另一个问题,因为我想如果用户点击了喜欢的ImageView,他就不能同时点击不喜欢的ImageView。他只能选择其中一个。如果他选择了一个,另一个就不选择自己。也许你知道我该怎么做?让我看看