有没有办法计算firebase数据库中的子项数?

时间:2017-01-23 17:37:07

标签: android firebase firebase-realtime-database

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

                }
            });
        }
    });

当按下按钮时,我正在努力增加计数,并将该计数数字存储到数据库中" Like"。我已经声明了DatabaseReference mDatabaseLike,它看起来像这样。 mDatabaseLike

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

请帮忙!非常感谢你。

1 个答案:

答案 0 :(得分:0)

您应该从onClickListener中删除ChildEventListener,以便始终跟踪Likes。你也永远不会减少数量,你只是在本地改变它。您必须按照以下方式设置值:Example Domain</title> <!-- <====missing tag in this line --> <meta charset="utf-8" /> <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <style type="text/css"> body { background-color: #f0f0f2; margin: 0; padding: 0; font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; } div { width: 600px; margin: 5em auto; padding: 50px; background-color: #fff; border-radius: 1em; } a:link, a:visited { color: #38488f; text-decoration: none; } @media (max-width: 700px) { body { background-color: #fff; } div { width: auto; margin: 0 auto; border-radius: 0; padding: 1em; } } </style>

我还建议不要跟踪这样的喜欢,而是使用Transactions。它将处理两个用户同时点击Like的情况。根据您当前的实现,如果两个用户同时点击它,一个会覆盖另一个,只会增加一个而不是两个。