Android Firebase保持addListenerForSingleValueEvent更新[重复]

问题描述 投票:1回答:2

这个问题在这里已有答案:

我正在尝试使用firebase进行搜索查询,它的效果非常好。

Query searchQuery = usersRef.orderByChild(child).startAt(text).endAt(text + "\uf8ff").limitToFirst(limit);
    searchQuery.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            //search result logic
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {}
    });

我已经启用了离线功能,因为需要它们在我的应用程序中,这是我的问题:这个ValueEventListener一直在监听本地存储的数据,而我需要保持它始终更新...这是一个搜索查询。

我不认为keepSynced(true)应用于用户参考将是一个好主意,因为这个引用是巨大的,这将导致大量的互联网和内存浪费。

我在网上红了,使用addValueEventListener而不是addListenerForSingleValueEvent查询将始终从服务器接收更新的答案,而不查看本地存储的数据。这可能是解决我的问题的一种方法,但我需要监听数据ONCE,这将继续监听数据,所以如果我决定使用它,我应该停止这个监听器吗?

请帮助我一些想法,抱歉我的学术英语。

java android firebase
2个回答
1
投票

如果您启用了离线功能,则意味着即使它暂时失去网络连接,您也可以使用自己的应用。所以只要你是ValueEventListeneroffline就会继续收听本地存储的数据。如果您想要更新结果,那么您需要上线。

如果您只想听一次数据,那么您需要使用:addListenerForSingleValueEvent()。如果你想使用addValueEventListener,请不要忘记根据活动的生命周期删除监听器,因为我已经回答了here


1
投票

那么你可以保持对你的事件监听器的引用,并在你不需要时从引用中删除它。

myEventListener = ref.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        //happy place
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
       //error
    }
});

别的地方:

ref.removeEventListener(myEventListener);
© www.soinside.com 2019 - 2024. All rights reserved.