Android 检查 firebase 连接

Android check firebase connection

我正在为我的 Android 应用程序使用 firebase 数据库。 当我提交乐谱时,如果有效,会出现一条消息(片段服务器确定)。 我想为所有其他情况留言。有一个如果databaseEror不为null但是如果没有连接到firebase怎么办?

下面是我的代码:

ref.setValue(resultat, new DatabaseReference.CompletionListener() {
    @Override
    public void onComplete(DatabaseError databaseError, DatabaseReference dataRef) {
        if (databaseError == null) {
           FragmentManager fm3 = getFragmentManager();
           ServerOk serverok = new ServerOk();
           serverok.show(fm3, "serverok");
        } else {
           FragmentManager fm3 = getFragmentManager();
           Server server = new Server();
           server.show(fm3, "server");
        }
    }
});

谢谢你的回答

您尝试添加 onFailureListner 了吗?

ref.setValue(resultat, new DatabaseReference.CompletionListener() {
    @Override
    public void onComplete(DatabaseError databaseError, DatabaseReference dataRef) {
        if (databaseError == null) {
           FragmentManager fm3 = getFragmentManager();
           ServerOk serverok = new ServerOk();
           serverok.show(fm3, "serverok");
        } else {
           FragmentManager fm3 = getFragmentManager();
           Server server = new Server();
           server.show(fm3, "server");
        }
    }
})
.addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                e.printStackTrace();
             // did not set value
            }
        });

查看文档:https://firebase.google.com/docs/reference/android/com/google/firebase/database/DatabaseError

您可以使用 databaseError.getCode() 检查错误类型,然后根据此处列出的错误类型进行测试。对于调试,您还可以使用 databaseError.getMessage()databaseError.getDetails() 来获取信息。您还可以使用 databaseError.toException().printStackTrace().

将其打印为 StackTrace

在你的情况下,我猜想 databaseError.getCode() == DatabaseError.DISCONNECTEDdatabaseError.getCode() == DatabaseError.NETWORK_ERROR,但我不确定这些。你可以自己测试一下。您当然也可以只打印代码以进行调试。

Firebase 客户端不会将缺少连接视为错误,因此它不会调用您的完成侦听器并显示错误。

当您在 Firebase 客户端未连接到其后端时调用 setValue() 时,客户端会将写入保留在队列中。当连接恢复时,它会将写入发送到服务器。

您的完成处理程序只有在服务器执行写入后才会被调用。如果出现错误(即如果安全规则拒绝写入),您将在回调中收到一个错误。

如果想知道客户端在调用setValue()之前是否连接到服务器,可以attach a listener to .info/connected.

尝试在依赖项中包含此 com.google.firebase:firebase-database:19.1.0