以下代码会在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编写应用程序时,您的应用程序 无论网络延迟或互联网如何,都将保持响应 连接。
重新建立连接后,我们会收到相应的设置 事件使客户端“赶上”当前服务器 状态,无需编写任何自定义代码。
答案 0 :(得分:1)
我希望这对你有用
下面的行放入您的应用程序类onCreate()
方法
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
它将缓存数据,当互联网连接到来时,它会将数据同步到firebase数据库
答案 1 :(得分:0)
当您未连接到Firebase服务器时写入数据库不被视为错误情况。因此,在这种情况下不会抛出任何错误。
您可以做的最好的事情是通过将监听器附加到.info/connected
来检测您是否单独连接到Firebase服务器,如detecting connection state上的文档中所示。当.info/connected
为false
时,您的应用未连接到网络,因此本地写入将排队。
答案 2 :(得分:0)
检查项目中firebase控制台的权限,如下面的代码所示。 { “规则”:{ “.read”:是的, “.write”:是的 } }
我希望你在Android清单文件中添加互联网权限..
<uses-permission android:name="android.permission.INTERNET"/>
所有事情都检查您是否正确插入数据。 如果有任何问题,你可以参考这个链接.. https://www.simplifiedcoding.net/firebase-realtime-database-crud/