【问题标题】:Need get the count of likes需要得到喜欢的次数
【发布时间】:2017-01-12 14:43:39
【问题描述】:

我无法完成喜欢的次数。用户可以点赞帖子,我希望 Firebase 计算用户点赞帖子的数量。

我的代码:

viewHolder.mThumb.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
    mProcessLikes = true;
    mDatabaseLikes.addValueEventListener(new ValueEventListener() {
       @Override
       public void onDataChange(DataSnapshot dataSnapshot) {
       if (mProcessLikes){
          if (dataSnapshot.child(post_key).hasChild(mAuth.getCurrentUser().getUid())){                                            mDatabaseLikes.child(post_key).child(mAuth.getCurrentUser().getUid()).removeValue();
          mProcessLikes = false;
          } else {mDatabaseLikes.child(post_key).child(mAuth.getCurrentUser().getUid()).setValue("like");
          mProcessLikes = false;
          }
       }
    }
    @Override
    public void onCancelled(DatabaseError databaseError) {}
    });
  }
});

我应该在上面的代码中添加什么代码来实现附加图像上显示的结果?

【问题讨论】:

  • 像这样将点赞数和点赞数结合起来是个坏主意。我会为这些使用单独的节点,例如/Likes/$postid/$uidLikeCounts/$postid.
  • 感谢弗兰克!我也是这么想的。
  • Firebase 最近发布了 Cloud Functions。看看这个answer了解更多详情

标签: android firebase firebase-realtime-database


【解决方案1】:

从您的表中删除 count 字段。如果我理解正确.. 当一个对象被喜欢时,会添加一些用户 ID。这有效并且足够了。查询点赞数如下:

databaseRef.child("Likes").child(*key*).addListenerForSingleValueEvent(new ValueEventListener() {

      @Override
      public void onDataChange (DataSnapshot dataSnapshot) {
        dataSnapshot.getChildrenCount(); <- like count
      }

      @Override
      public void onCancelled (DatabaseError databaseError) {

      }
    });

【讨论】:

  • 太棒了!! getChildrenCount 适合完美!谢谢!
【解决方案2】:

您应该从 Firebase 文档中了解 Save data as transactions

例如:

private void onStarClicked(DatabaseReference postRef) {
    postRef.runTransaction(new Transaction.Handler() {
        @Override
        public Transaction.Result doTransaction(MutableData mutableData) {
            Post p = mutableData.getValue(Post.class);
            if (p == null) {
                return Transaction.success(mutableData);
            }

            if (p.stars.containsKey(getUid())) {
                // Unstar the post and remove self from stars
                p.starCount = p.starCount - 1;
                p.stars.remove(getUid());
            } else {
                // Star the post and add self to stars
                p.starCount = p.starCount + 1;
                p.stars.put(getUid(), true);
            }

            // Set value and report transaction success
            mutableData.setValue(p);
            return Transaction.success(mutableData);
        }

        @Override
        public void onComplete(DatabaseError databaseError, boolean b,
                               DataSnapshot dataSnapshot) {
            // Transaction completed
            Log.d(TAG, "postTransaction:onComplete:" + databaseError);
        }
    });
}

完整示例here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 2011-09-29
    • 1970-01-01
    • 2013-04-03
    • 2016-01-01
    相关资源
    最近更新 更多