我第一次研究了firebase,阅读了有关firebase脱机功能的文章,测试了两种场景:
场景1 (working):
场景2(不工作):
我增加了这一行:
Firebase.getDefaultConfig().setPersistenceEnabled(true);如何处理场景2?我需要通过本地数据库处理这个场景吗?
发布于 2017-03-14 17:39:33
你用的是Firebase.getDefaultConfig().setPersistenceEnabled(true);和keepSynced(true)吗
因为在[消]火基文件中说是keepSynced(true)让“魔法”发生(和setPersistenceEnabled(true)一起):
通过在位置上调用keepSynced(true),将自动下载该位置的数据并保持其同步,即使没有为该位置附加侦听器。此外,当一个位置保持同步时,将不会从持久磁盘缓存中被逐出。
因此,如果您不使用它,您就不会在本地保存您的数据库,然后当您“杀死”应用程序时,您的应用程序再次打开时将不会有任何数据库可查询。
发布于 2016-06-20 13:22:26
我想您使用一些服务来同步数据,它将不适用于第二个场景。因此,当用户打开数据服务时,您将收到一个广播接收器,从该检查服务没有运行,然后启动该服务。
发布于 2017-08-28 07:08:27
不需要使用本地数据库来处理场景2。在应用程序类中使用Firebase.getDefaultConfig().setPersistenceEnabled(true),在清单文件中使用android:name="yourapplicationclass“。为了在更改网络时(即在线/脱机)处理同步,使用事务处理程序将本地同步处理到firebase数据库,因为有些数据没有被推到firebase server.Like,因此我使用了内部网络更改方法,并解决了这个问题:
mDatabase.runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(MutableData mutableData) {
if(mutableData.getValue() == null) {
mutableData.setValue(1);
} else {
mutableData.setValue((Long) mutableData.getValue() + 1);
}
return Transaction.success(mutableData); //we can also abort by calling Transaction.abort()
}
@Override
public void onComplete(DatabaseError databaseError, boolean b, DataSnapshot dataSnapshot) {
}
});https://stackoverflow.com/questions/37923226
复制相似问题