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

时间:2016-10-22 09:19:38

标签: android firebase firebase-realtime-database persistence

我启用了setPersistenceEnabled(true),然后发生了错误的事情,并且假设有孩子的节点现在没有;

节点采用以下形式:

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

发生恐怖事件后, concernNode 更改为:

concernedNode : true

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

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

正如您所看到的,如果ConcerNode现在是一个布尔值,则抛出一个异常,其中 concernNodePojo 无法转换为布尔值。

现在问题是这已经在缓存中,如果setPersistenceEnabled(false),一切都会正常工作,但是如果setPersistenceEnabled(true),应用程序会崩溃,因为无法删除脱机数据。

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

1 个答案:

答案 0 :(得分:1)

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

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

例如:

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