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.DISCONNECTED
或 databaseError.getCode() == DatabaseError.NETWORK_ERROR
,但我不确定这些。你可以自己测试一下。您当然也可以只打印代码以进行调试。
Firebase 客户端不会将缺少连接视为错误,因此它不会调用您的完成侦听器并显示错误。
当您在 Firebase 客户端未连接到其后端时调用 setValue()
时,客户端会将写入保留在队列中。当连接恢复时,它会将写入发送到服务器。
您的完成处理程序只有在服务器执行写入后才会被调用。如果出现错误(即如果安全规则拒绝写入),您将在回调中收到一个错误。
如果想知道客户端在调用setValue()
之前是否连接到服务器,可以attach a listener to .info/connected
.
尝试在依赖项中包含此 com.google.firebase:firebase-database:19.1.0
我正在为我的 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.DISCONNECTED
或 databaseError.getCode() == DatabaseError.NETWORK_ERROR
,但我不确定这些。你可以自己测试一下。您当然也可以只打印代码以进行调试。
Firebase 客户端不会将缺少连接视为错误,因此它不会调用您的完成侦听器并显示错误。
当您在 Firebase 客户端未连接到其后端时调用 setValue()
时,客户端会将写入保留在队列中。当连接恢复时,它会将写入发送到服务器。
您的完成处理程序只有在服务器执行写入后才会被调用。如果出现错误(即如果安全规则拒绝写入),您将在回调中收到一个错误。
如果想知道客户端在调用setValue()
之前是否连接到服务器,可以attach a listener to .info/connected
.
尝试在依赖项中包含此 com.google.firebase:firebase-database:19.1.0