没有任何方法可以使用firebase在没有setPersistance(true)的情况下离线读取数据

时间:2019-03-15 06:16:37

标签: android firebase

我想为我的用户脱机读取数据,但是持久模式将使ValueEventListener中的OnDataChange调用两次。我该如何预防。我需要出于自己的目的使用ValueEvent。有人请帮我。

更新:我正在为我的应用程序中的用户创建一个好友建议列表,建议的用户必须与当前用户没有任何关系。这是我的代码(我将Persistance用于离线数据作为Firebase的建议)

 valueEventListener_check_relationship=new ValueEventListener() {

        @Override
        public void onDataChange(@NonNull final DataSnapshot dataSnapshot_root) {

            num_fiend_req=0;
            num_sent_req=0;
            update_badges(num_sent_req,tv_badges_sent_req);
            update_badges(num_fiend_req,tv_badges_friend_req);
            arrayList_suggestions.clear();
            adapter_suggestions.notifyDataSetChanged();

            GlobalConstants.ROOT_REF.child(GlobalConstants.CHILD_USERS)
                    .addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {


                            for(DataSnapshot snapshot:dataSnapshot.getChildren()){

                                Object_User user_suggested=snapshot.getValue(Object_User.class);

                                if(!user_suggested.user_id.equals(GlobalConstants.getMyUID())){

                                    if(!dataSnapshot_root.hasChild(user_suggested.user_id))

                                        addToList(user_suggested);


                                    else {
                                        RemoveUserFromlist(user_suggested);

                                        if (dataSnapshot_root.child(user_suggested.user_id)
                                                .hasChild(GlobalConstants.CHILD_REQUESTING)){
                                            String values=dataSnapshot_root.child(user_suggested.user_id)
                                                    .child(GlobalConstants.CHILD_REQUESTING)
                                                    .getValue().toString();

                                            if (values.equalsIgnoreCase(GlobalConstants.VALUE_REQUESTING_SENDER))
                                                num_sent_req++;
                                            else num_fiend_req++;

                                        }
                                        update_badges(num_sent_req,tv_badges_sent_req);
                                        update_badges(num_fiend_req,tv_badges_friend_req);
                                        adapter_suggestions.notifyDataSetChanged();
                                    }
                                }


                            }



                        }

                        @Override
                        public void onCancelled(@NonNull DatabaseError databaseError) {

                        }
                    });

        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    };
    GlobalConstants.ROOT_REF.child(GlobalConstants.CHILD_RELATIONSHIP)
            .child(GlobalConstants.getMyUID()).keepSynced(true);

    GlobalConstants.ROOT_REF.child(GlobalConstants.CHILD_RELATIONSHIP)
            .child(GlobalConstants.getMyUID())
            .addValueEventListener(valueEventListener_check_relationship);

0 个答案:

没有答案