围绕.setValue()的Firebase异常处理

时间:2018-04-23 11:27:32

标签: android firebase firebase-realtime-database

以下代码会在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编写应用程序时,您的应用程序   无论网络延迟或互联网如何,都将保持响应   连接。

     

重新建立连接后,我们会收到相应的设置   事件使客户端“赶上”当前服务器   状态,无需编写任何自定义代码。

3 个答案:

答案 0 :(得分:1)

我希望这对你有用

下面的行放入您的应用程序类onCreate()方法

FirebaseDatabase.getInstance().setPersistenceEnabled(true);

它将缓存数据,当互联网连接到来时,它会将数据同步到firebase数据库

答案 1 :(得分:0)

当您未连接到Firebase服务器时写入数据库不被视为错误情况。因此,在这种情况下不会抛出任何错误。

您可以做的最好的事情是通过将监听器附加到.info/connected来检测您是否单独连接到Firebase服务器,如detecting connection state上的文档中所示。当.info/connectedfalse时,您的应用未连接到网络,因此本地写入将排队。

答案 2 :(得分:0)

检查项目中firebase控制台的权限,如下面的代码所示。 {   “规则”:{     “.read”:是的,     “.write”:是的   } }

我希望你在Android清单文件中添加互联网权限..

    <uses-permission android:name="android.permission.INTERNET"/>

所有事情都检查您是否正确插入数据。 如果有任何问题,你可以参考这个链接.. https://www.simplifiedcoding.net/firebase-realtime-database-crud/