android–Firebase离线功能和addListenerForSingleValueEvent

android–Firebase离线功能和addListenerForSingleValueEvent,第1张

概述每当我将addListenerForSingleValueEvent与setPersistenceEnabled(true)一起使用时,我只能设法从服务器获取DataSnapshot的本地脱机副本而不是更新的DataSnapshot.但是,如果我将addValueEventListener与setPersistenceEnabled(true)一起使用,我可以从服务器获取DataSnapshot的最新

每当我将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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1104528.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存