2016-12-09 4 views
1

私は好きな人のカウントを行うことはできません。ユーザーは投稿が気に入っていて、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) {} 
    }); 
    } 
}); 

が、私は結果を達成するために上記のコードに追加する必要がありますどのようなコードが添付された画像の上にあったのですか?

enter image description here

+0

このような数を組み合わせることは悪い考えです。これらのために別々のノードを使用します(例: '/ Likes/$ postid/$ uid'と' LikeCounts/$ postid'を返します。 –

+0

サンクスフランク!私は同じと思った。 –

+0

Firebaseは最近Cloud機能をリリースしました。これを見てください[回答](http://stackoverflow.com/a/42713792/5861618) –

答えて

0

あなたは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

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) { 

     } 
    }); 
+0

Brilliant !! getChildrenCountは完璧に適合します!ありがとう! –

+0

それが援助された場合、答えに印を付けることを忘れないでください:) – DroidBender

関連する問題