喜欢/喜欢Firebase中的反应功能

时间:2018-01-06 06:51:04

标签: android firebase firebase-realtime-database

谁能告诉我如何在Firebase中实现爱情反应按钮? 我在Firebase RealTime数据库中有这个节点:

Posts
 -L28ejHO7-AHEOyclLsP
     Caption: "lol"
     CurrentUserReaction: "reacted"
     Image: "https://firebasestorage.googleapis.com/v0/b/nep..."
     ReactingUser 
         <UserWhoReactedOnthisPostID> : "1"
     Time: "09:55:58"
     TotalReactions: "1"
     Unique: "-L28ejHO7-AHEOyclLsP"
     UserPhoto: "https://firebasestorage.googleapis.com/v0/b/nep..."
     Username: "JustAnotherShit"

所以,我做的是每次用户按下爱情按钮,我想将他的userId添加到ReactingUser ..这样就可以了,但我面临的问题是,当我按下按钮时,它会添加currentUser到ReactingUser节点,那没关系,而CurrentUserReaction设置为&#34;反应&#34;太。我的recyclerView填充为:

protected void populateViewHolder(final PostViewHolder viewHolder, final Posts model, int position) {
                        Context c = getActivity();
                        context = c;
                        viewHolder.setUsername(model.getUsername());
                        viewHolder.setCaption(model.getCaption());
                        viewHolder.setTime(model.getTime());
                        viewHolder.setImage(model.getImage(), c);
                        viewHolder.setCurrentUserImage(model.getUserPhoto(), c);
                        viewHolder.imageViewIfUserClicked(model.getReactingUsers(), c);
                        totalVotes = model.getTotalReactions();
                        uniqueKey = model.getUnique();
                    }

viewHolder.imageViewIfUserClicked(model.getReactingUsers(),c)用于根据FirebaseRealtimeDatabase节点&#34; CurrentUserReaction&#34;填充视图。因此,当一个用户做出反应时,它会被设置为&#34;反应&#34;和其他用户登录,虽然不是他对此做出反应,但它仍然有反应,但它是以前的用户。那么,有关这件事的任何帮助吗?我的做法是对的吗?或者我应该去做其他事情?任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:0)

一切看起来都很好,期待“CurrentUserReaction”节点。不要存储用户是否在post节点中作出反应,因为它取决于currentUser。

由于您正在存储“ReactingUser”,因此您可以检查该节点中当前用户的ID是否存在。如果存在那么该用户已经做出反应。

添加SingleValueListner以检查每个帖子的“ReactingUser”节点上是否存在userId。

protected void populateViewHolder(final PostViewHolder viewHolder, final Posts model, int position) {
    Context c = getActivity();
    context = c;
    viewHolder.setUsername(model.getUsername());
    viewHolder.setCaption(model.getCaption());
    viewHolder.setTime(model.getTime());
    viewHolder.setImage(model.getImage(), c);
    viewHolder.setCurrentUserImage(model.getUserPhoto(), c);
    totalVotes = model.getTotalReactions();
    uniqueKey = model.getUnique();

    getRef(position).child("ReactedUser").child(currentUserId).addListenerForSingleValueEvent(new.ValueEventListener() {
      @Override
      public void onDataChange(DataSnapshot dataSnapshot) { 
          if(snapshot.exists())
              //user have reacted. Update ui
          else
              //user haven't reacted. 
      }

      @Override
      public void onCancelled(DatabaseError databaseError) {
      }
  });
}

P.S。这样可以正常工作但我确实觉得每次发帖都一次又一次地发送请求有点不好。我找不到任何替代方法来做到这一点。如果有,请告诉。