2017-01-23 36 views
2
mImageLike.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
      mProcessLike = true; 
      //mLikeCount.setText("numLikes"); 
      mDatabaseLike.addValueEventListener(new ValueEventListener() 
      { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) 
       { 
        if(mProcessLike) 
        { 
         if(dataSnapshot.child(post_key).hasChild(mAuth.getCurrentUser().getUid())) 
         { 
          mDatabaseLike.child(post_key).child(mAuth.getCurrentUser().getUid()).removeValue(); 
          numLike--; 
          mProcessLike = false; 
         } 
         else 
         { 
          mDatabaseLike.child(post_key).child(mAuth.getCurrentUser().getUid()).setValue("Liked"); 
          mProcessLike = false; 
         } 
        } 
       } 

       @Override 
       public void onCancelled(DatabaseError databaseError) 
       { 

       } 
      }); 

      mDatabaseLike.addChildEventListener(new ChildEventListener() 
      { 
       @Override 
       public void onChildAdded(DataSnapshot dataSnapshot, String s) 
       { 
        numLike = dataSnapshot.getChildrenCount(); 
        mDatabaseLike.child(post_key).child("numLike").setValue(numLike); 
       } 

       @Override 
       public void onChildChanged(DataSnapshot dataSnapshot, String s) 
       { 
       } 

       @Override 
       public void onChildRemoved(DataSnapshot dataSnapshot) 
       { 
       } 

       @Override 
       public void onChildMoved(DataSnapshot dataSnapshot, String s) 
       { 

       } 

       @Override 
       public void onCancelled(DatabaseError databaseError) 
       { 

       } 
      }); 
     } 
    }); 

当像按钮被按下时,我正在增加计数挣扎,并将该计数数字存储到数据库“喜欢”。我已经声明了DatabaseReference mDatabaseLike,它看起来像这样。 mDatabaseLike有没有一种方法可以统计Firebase数据库中的儿童人数?

我试图计算每个喜欢的孩子的数量(与“喜欢”的字符串),并将它们存储到每个键(如Kb6cSLImN_7lrPyAr2Q)作为numLike。当我点击按钮时,它会更新计数,但是当我再次单击按钮以删除时,该数字不会减少。

请帮忙!非常感谢你。

回答

0

您应该从onClickListener中删除ChildEventListener,以便始终跟踪喜欢。你也不会减少类似的数量,你只是在本地改变它。你必须设置这个值,一旦你减少它像这样:mDatabaseLike.child(post_key).child('numLike').setValue(numLike);

我也建议不跟踪喜欢那样的喜欢,并使用Transactions来代替。它将处理两个用户同时点击Like的情况。在目前的实施中,如果两个用户同时点击它,就会像覆盖另一个用户一样,只增加一个而不是两个。

相关问题