我启用了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)
,然后检索新数据,以便可以写入离线数据,但事实并非如此。检查离线数据,应用程序崩溃。
答案 0 :(得分:1)
最简单的方法是手动删除应用数据或重新安装应用。
以编程方式,最好的办法是保持启用持久性并检索数据,而无需将其解析到您的POJO中。只需附加一个在onDataChange()
中不执行任何操作的侦听器,或者,如果您有兴趣查看是否有新数据,请解析快照而不将其转换为concernedNodePojo
。
例如:
public void onDataChange(DataSnapshot snapshot) {
System.out.println("Got "+snapshot.getKey());
System.out.println("Got "+snapshot.child("child").getValue());
}