当前位置:  开发笔记 > 运维 > 正文

Firebase脱机功能和addListenerForSingleValueEvent

如何解决《Firebase脱机功能和addListenerForSingleValueEvent》经验,为你挑选了1个好方法。

每当我使用addListenerForSingleValueEventsetPersistenceEnabled(true),我只能设法从服务器获取本地脱机副本DataSnapshot不是更新DataSnapshot.

但是,如果我用addValueEventListenersetPersistenceEnabled(true),我可以得到的最新副本DataSnapshot从服务器.

这是正常的,addListenerForSingleValueEvent因为它只搜索DataSnapshot本地(离线)并在成功检索DataSnapshot ONCE(离线或在线)后删除其侦听器?



1> Frank van Pu..:
持久性如何运作

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); 
// OR
ref.addListenerForSingleValueEvent(listener); 

如果该位置的值位于本地磁盘高速缓存中,则Firebase客户端将onDataChange()立即从本地高速缓存中调用该值.如果还将启动与服务器的检查,则要求对值进行任何更新.如果服务器上的数据自上次添加到缓存后发生了变化,它可能会再次调用onDataChange().

使用时会发生什么 addListenerForSingleValueEvent

将单个值事件侦听器添加到同一位置时:

ref.addListenerForSingleValueEvent(listener);

Firebase客户端将(与之前的情况一样)立即调用onDataChange()本地磁盘缓存中的值.即使服务器上的值变得不同,它也不会再调用它onDataChange().请注意,仍会请求更新的数据并在后续请求中返回.

之前在Firebase如何与共享数据同步工作中介绍了这一点?

解决方案和解决方法

最好的解决方案是使用addValueEventListener()而不是单值事件监听器.常规值侦听器将从服务器获取直接本地事件和潜在更新.

作为解决方法,您还可以调用keepSynced(true)使用单值事件侦听器的位置.这可确保数据在更改时进行更新,从而大大提高单值事件侦听器查看当前值的可能性.


调用`keepSynced(true)`然后使用`.addListenerForSingleValueEvent(listener);`在数据库更改后第一次打开应用程序时``不起作用.在注册更改之前需要打开应用程序两次.
谢谢你的完美插图.但keepSynced(true)和addValueEventListener将始终保持打开的连接.与keepSynced(false)和addListenerForSingleValueEvent相反,将允许firebase在某个时间后断开连接.我怎么能强制一次手动更新?
这是一种不方便的行为,它使测试几乎不可能.
使用keepSynced时的警告:可能会导致带宽消耗巨大,并产生相关费用。请参阅以下内容以获得实用说明:https://pamartinezandres.com/lessons-learnt-the-hard-way-using-firebase-realtime-database-c609b52b9afb
推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有