
每当我将addListenerForSingleValueEvent与setPersistenceEnabled(true)一起使用时,我只能设法从服务器获取DataSnapshot的本地脱机副本而不是更新的DataSnapshot.
但是,如果我将addValueEventListener与setPersistenceEnabled(true)一起使用,我可以从服务器获取DataSnapshot的最新副本.
对于addListenerForSingleValueEvent这是正常的,因为它只在本地(离线)搜索DataSnapshot并在成功检索DataSnapshot ONCE(离线或在线)后删除其侦听器吗?
解决方法:
持久性如何运作
Firebase客户端会保留您在内存中主动侦听的所有数据的副本.一旦最后一个侦听器断开连接,数据将从内存中刷新.
如果您在Firebase Android应用程序中启用磁盘持久性,请执行以下 *** 作:
Firebase.getDefaultConfig().setPersistenceEnabled(true); Firebase客户端将保留应用最近收听的所有数据的本地副本(在磁盘上).
附加监听器时会发生什么
假设您有以下ValueEventListener:
ValueEventListener Listener = new ValueEventListener() { @OverrIDe public voID onDataChange(DataSnapshot snapshot) { System.out.println(snapshot.getValue()); } @OverrIDe public voID onCancelled(FirebaseError firebaseError) { // No-op }};将ValueEventListener添加到位置时:
ref.addValueEventListener(Listener); // ORref.addListenerForSingleValueEvent(Listener); 如果该位置的值位于本地磁盘高速缓存中,则Firebase客户端将立即从本地高速缓存中为该值调用onDataChange().如果还将启动与服务器的检查,则要求对值进行任何更新.如果服务器上的数据自上次添加到缓存后发生了更改,它可能会再次调用onDataChange().
使用addListenerForSingleValueEvent时会发生什么
将单个值事件侦听器添加到同一位置时:
ref.addListenerForSingleValueEvent(Listener);Firebase客户端(与之前的情况一样)会立即从本地磁盘缓存中调用onDataChange()来获取值.即使服务器上的值结果不同,它也不会再调用onDataChange().请注意,仍会请求更新的数据并在后续请求中返回.
这在之前的How does Firebase sync work, with shared data?中有所涉及
解决方案和解决方法
最好的解决方案是使用addValueEventListener(),而不是单值事件监听器.常规值侦听器将从服务器获取直接本地事件和潜在更新.
作为解决方法,您还可以在call keepSynced(true)上使用单值事件侦听器的位置.这可确保数据在更改时进行更新,从而大大提高单值事件侦听器查看当前值的可能性.
以上是内存溢出为你收集整理的android – Firebase离线功能和addListenerForSingleValueEvent全部内容,希望文章能够帮你解决android – Firebase离线功能和addListenerForSingleValueEvent所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)