【发布时间】:2018-10-03 10:26:38
【问题描述】:
以下代码将数据插入 Firebase 数据库,并且当我的 Android 设备具有网络连接时运行良好。但是,如果我离线,它不会直接与在线数据库同步。如果它被缓存而不是直接同步,我希望得到通知。
DatabaseReference databaseIssue;
databaseIssue = FirebaseDatabase.getInstance().getReference("Issue");
String timeDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
databaseIssue.child(timeDate).setValue("test");
有没有办法实现类似简单的try/catch之类的东西:
databaseIssue.child(timeDate).setValue("test");
如果数据只被缓存,会出现问题吗?
来自 Firebase 文档 (https://firebase.google.com/docs/database/admin/save-data)
添加完成回调
DatabaseReference dataRef = ref.child("data");
dataRef.setValueAsync("I'm writing data", new DatabaseReference.CompletionListener() {
@Override
public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
if (databaseError != null) {
System.out.println("Data could not be saved " + databaseError.getMessage());
} else {
System.out.println("Data saved successfully.");
}
}
});
设置值确实会引发其他异常: Firebase: Permission denied - setValue()
如果firebase无法连接到在线数据库并且必须缓存数据,是否会抛出异常?如果数据正在缓存或同步,有没有办法记录?
网络连接和离线写入
Firebase Node.js 和 Java 客户端维护自己的 >任何活动数据的内部版本。什么时候 数据被写入,它首先被写入这个本地版本。客户端 然后将该数据与数据库和其他客户端同步 在“尽力而为”的基础上。
因此,所有对数据库的写入都会触发本地事件 立即,甚至在任何数据写入数据库之前。 这意味着当您使用 Firebase 编写应用程序时,您的应用程序 无论网络延迟或互联网如何,都将保持响应 连接性。
一旦重新建立连接,我们将收到相应的集合 事件,以便客户端“赶上”当前服务器 状态,无需编写任何自定义代码。
【问题讨论】:
-
你的数据库规则是什么?您的数据库规则可能会导致问题。
-
{ "rules": { ".read": true, ".write": "auth != null" } }
-
我在您的问题中阅读了两个不同的问题:1:您可以在在线时保存数据,但在离线时不能。 2:您收到权限被拒绝错误。请具体说明您的问题。
-
@AndréKool 我更新了我的问题,抱歉没有说清楚。
标签: android firebase firebase-realtime-database