2017-02-28 72 views
0

我有一個問題將孩子「喜歡」的值傳遞給子「post」(節點「postLikes」)。這裏是我的Json樹: enter image description here總結從一個子節點的所有值,並將總和值傳遞給另一個子節點

這裏是我的像事件的按鈕偵聽:

mDatabaseRefLike.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     UserLike userLike = new UserLike(); 
     if(mProcessLike){ 

      if(dataSnapshot.child(mPostKey).hasChild(mUserId)){ 
       mDatabaseRefLike.child(mPostKey).child(mUserId).removeValue(); 
       mProcessLike = false; 

      }else { 
       mDatabaseRefLike.child(mPostKey).child(mUserId).setValue(1); 
       userLike.setUserLikes(1); 
       mProcessLike = false; 

       for (DataSnapshot snap: dataSnapshot.getChildren()) { 
        UserLike getLikes= snap.getValue(UserLike.class); 
        int gLikes = getLikes.getUserLikes(); 

        gLikes += gLikes; 

        mDatabaseRefPost.child(mPostKey).child("postLikes").setValue(gLikes); 
       } 
      } 
     } 
    } 
    @Override 
    public void onCancelled(DatabaseError databaseError) { 

    } 
}); 

我已經花了幾天時間來解決這個問題,似乎我無法找到一個解決方案。

+0

哪些數據'mDatabaseRefLike'和'mDatabaseRefPost'指向? – koceeng

+0

@koceeng'mDatabaseRefLike'指向子項「like」,而'mDatabaseRefPost'指向子項「post」。 –

回答

0

它應該是這樣的:(我已經包括評論,這樣可以理解更容易)

mDatabaseRefLike.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     // sorry I remove userLike object because I don't quite understand what is that for 

     // get count data first before it's changed 
     int likeCounter = (int) dataSnapshot.getChildrenCount(); 

     // here we add/remove value in "like/postId/userId" 
     // and update likeCounter value 
     if(dataSnapshot.child(mPostKey).hasChild(mUserId)) { 
      mDatabaseRefLike.child(mPostKey).child(mUserId).removeValue(); 
      likeCounter--; 

     } else { 
      mDatabaseRefLike.child(mPostKey).child(mUserId).setValue(true); 
      likeCounter++; 
     } 

     // then we update value in "post/postId/postLikes" 
     mDatabaseRefPost.child(mPostKey).child("postLikes").setValue(likeCounter); 
    } 
    ... 
}); 

希望這有助於。

注:

對不起它需要我長時間理解你的代碼。首先,我認爲你的代碼只是簡單的事情更復雜。但是當我試圖解決問題時,這實際上是一個好習慣。偉大的工作:)

+1

謝謝先生!你的答案解決了這個問題,雖然我得到了另一個bug,如果用戶喜歡另一個帖子,這個值將會是「喜歡」的孩子節點的數量。但是,這將在另一個線程(問題)我想。再次感謝您花時間解決問題! :) –

+1

我錯過了分析這部分。知道快照變量包含「ValueEventListener」的目標,所以我想出了定位節點「mPostKey」的解決方案。 (int)dataSnapshot.getChildrenCount();' **解決方案** - 'int likeCounter =(int)dataSnapshot.child(mPostKey).getChildrenCount();' 剛剛在這裏評論過,以防萬一有人遇到同樣的問題。快樂編碼! :) –

相關問題