Firebase:如何强制为一个特定节点检索新数据。

Firebase : How to force retrieval of new data for one particular node.

我启用了setPersistenceEnabled(true),然后错误地发生了一些事情,一个应该有children的节点现在没有了;

节点的格式为:

 Nodes : {
         concernedNode : {
                       child : "data",
                       child2 : "data"
         } 
   }

错误后,关注节点 更改为:

concernedNode : true

在 java 中,我得到的数据如下:

concernedNodePojo pojo = dataSnapshot.getValue(concernedNodePojo.class);

如您所见,如果 concernedNode 现在是布尔值,则会引发异常,其中 concernedNodePojo 无法转换为布尔值。

现在的问题是这已经在缓存中了,如果setPersistenceEnabled(false),一切都会正常,但是如果setPersistenceEnabled(true),应用程序崩溃,因为没有办法删除离线数据。

我尝试了setPersistenceEnabled(false),然后检索新数据,以便可以覆盖离线数据,但事实并非如此。离线数据被检查并且应用程序崩溃了。

最简单的方法是手动删除应用数据或重新安装应用。

以编程方式,您最好的选择是保持持久性启用并检索数据而不将其解析到您的 POJO 中。只需附加一个在其 onDataChange() 中不执行任何操作的侦听器,或者,如果您想查看它是否有新数据,请解析快照而不将其转换为 concernedNodePojo

例如:

public void onDataChange(DataSnapshot snapshot) {
    System.out.println("Got "+snapshot.getKey());
    System.out.println("Got "+snapshot.child("child").getValue());
}