2017-02-28 12 views
0

子の値を子の「投稿」(ノード「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'は子の「好き」を指していますが、「mDatabaseRefPost」は子の「投稿」です。 –

答えて

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

ありがとうございます!あなたの答えは問題を解決しますが、ユーザーが別の投稿を気に入った場合、その値は子供のノードの数になります。しかし、それは別のスレッド(質問)にあると思います。もう一度、問題を解決する時間をとってくれてありがとう! :) –

+1

私はこの部分を分析していませんでした。スナップショット変数を知ることは 'ValueEventListener'の目標を含んでいるので、私はノード" mPostKey "を目標とする解決策を思いつきました。 **問題** - 'int likeCounter =(int)dataSnapshot.getChildrenCount();' **ソリューション** - 'int likeCounter =(int)dataSnapshot.child(mPostKey).getChildrenCount();' I誰かが同じ問題を抱えている場合に備えて、ちょうどここにそれをコメントしました。ハッピーコーディング! :) –

関連する問題