【发布时间】:2018-08-11 14:09:11
【问题描述】:
我正在尝试使用 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 查询将始终从服务器接收更新的答案,而无需查看本地存储的数据。 这可能是解决我的问题的一种方法,但我需要侦听一次数据,这将继续侦听数据,所以如果我决定使用它,我应该停止这个侦听器吗?
请帮我一些想法,对不起我的学术英语。
【问题讨论】:
-
使用磁盘持久性和
addListenerForSingleValueEvent不要混用。如果您想使用磁盘持久性,您应该使用addValueListener来获取缓存值(立即)和可能的更新服务器值(稍后)(无论如何通常推荐)。在这里查看我的详细解释:stackoverflow.com/questions/34486417/… -
如果这对您来说是一个真正的问题,请考虑使用Cloud Firestore。那里的
get()方法总是会在客户端连接时检查服务器端的值,只有在客户端离线时才返回缓存的值。