从每个RecyclerView对象

时间:2017-01-25 14:29:50

标签: android firebase firebase-realtime-database listener

我有一个由一些CardView填充的RecyclerView,其中包含一些TextView和一个Button(带有“like”按钮)。我正在使用Transaction更新一些简单的计数器,但在喜欢/不喜欢之前,我必须检查UserId是否存在于我的数据库的节点中,如:

 Post_reference :
                 ----userId_1_String: someValue
                 ----userId_2_String: someValue
                 ----userId_3_String: someValue

如果userId存在,我想删除它然后用事务更新计数器(在不同的节点),否则我想添加它然后更新计数器。 主要的问题是,我基本上只需要检查一次,然后我想删除监听器,以避免内存泄漏,但我找不到让它工作的方法。我一直在使用AddValueListenerForSingleValueEvent,但由于你无法分离它甚至更糟糕

2 个答案:

答案 0 :(得分:0)

要实现这一点,您应该在与Post_reference不同时删除postID中的值。

案例是,如果我喜欢你的帖子,我应该为你的userID提供dataSnapshop.exists()的参考资料,如果我不喜欢你的帖子,我应该什么都没有。因此,您始终可以使用@Override public void onPostLike(final String postKey) { final String userKey = FirebaseUtil.getCurrentUserId(); final DatabaseReference postLikesRef = FirebaseUtil.getLikesRef(); postLikesRef.child(postKey).child(userKey).addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { if (dataSnapshot.exists()) { // User already liked this post, so we toggle like off. postLikesRef.child(postKey).child(userKey).removeValue(); } else { postLikesRef.child(postKey).child(userKey).setValue(ServerValue.TIMESTAMP); } } @Override public void onCancelled(DatabaseError firebaseError) { } }); } 检查您的交易。

public static void ParseTXTFile(string FileName, int CompanyID)
        {
            try
            {
                FileInfo file = new FileInfo(FileName);
                string Date;
                string Time;
                string Phone;
                string JobNo;
                string Name;

                using (CsvReader reader = new CsvReader(new StreamReader(FileName), false))
                {
                    while (reader.ReadNextRecord())
                    {


                    }
                }
            }
            catch (Exception ex)
            {
                throw (ex);
            }
        }

您可以在Friendlypix Firebase示例中找到相同案例的完整功能示例,该示例模拟了一种社交媒体,您可以关注他人并查看他们的帖子。

答案 1 :(得分:0)

解决了这个问题,这很容易,但未来可能会有所帮助。 假设您有一个名为ref:

的数据库引用
yourButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            final ValueEventListener yourValueEventListener = new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    //your code on datasnapshot
                    ref.removeEventListener(this);
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            };
            ref.addValueEventListener(yourValueEventListener);
        }
    });

这基本上是在节点上读/写并立即分离监听器