我正在Android上创建一个习惯应用程序,我想将离线习惯数据存储在缓存中,以便客户端可以创建、编辑、按日期搜索、评分、养成习惯,如果他们喜欢,可以使用以下方式登录他们的 Google 帐户并将所有习惯缓存保存在数据库中
如何做到这一点?
我知道 Firebase 仅在从实时数据库检索时才存储在缓存中
habitsRef = FirebaseDatabase.getInstance().getReference("users")
habitsRef.keepSynced(true)
habitsRef.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
for(dataSnapshot in snapshot.children) {
println("******************* Load **************")
println(dataSnapshot)
}
}
override fun onCancelled(error: DatabaseError) {
println("************Error*****************")
}
})
如果我创建一个 Sqlite 来将所有习惯存储在缓存中,那么工作量将增加一倍,因为我需要将所有内容保存在 Firebase 中,如果我在 Sqlite 中执行查询,我也必须在 Firebase 中执行...
或者我应该更改实现而不是 Firebase 使用另一个数据库来实现此目的?
goOffline()
明确告诉 Firebase SDK 保持离线状态,如有关管理和检测连接状态的文档中所示。然后您可以写入数据库,所有数据将存储在缓存中,当用户登录其 Google 帐户时,您可以调用 goOnline()
来启用将其同步到云托管数据库。
也就是说,这对于 Firebase 实时数据库来说并不是理想的方法,因为其 SDK 的性能将随着本地不同步写入的数量线性恶化。如果您想采用这种方法,最好使用 Firestore - 因为即使有许多本地写入,该 SDK 也会保留最新的快照,以实现快速的本地性能。
另一种选择(也是更惯用的做法)是不要尝试禁用本地写入,而是:
这样,UID 在步骤 1 中就已已知(并且在步骤 3 中不会更改),并且您可以将用户数据保存到本地 Firebase 和云端。