java - Firebase“.info/connected”最初返回 false,然后返回 true
问题描述
我正在努力做到这一点,因此当用户失去与数据库的连接时,他们会被发送到上一个活动。但是,最终发生的情况是,在创建活动时,此数据库引用返回 false 并立即将用户引导回前一个屏幕,在这种情况下,他们必须重试。为什么一旦获得此引用,Firebase 就会返回 false,我该怎么做才能防止这种情况发生?
显而易见的解决方案是在用户连接后添加一种开关,然后允许断开连接的部分触发。但是,我想知道是什么导致false立即返回以及如何防止它这样做。谢谢你。
DatabaseReference referenceConnection = database.getReference(".info/connected");
referenceConnection.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
boolean isConnected = snapshot.getValue(Boolean.class);
if(isConnected){
Log.e("CONNECTION", "REGAINED");
searchForRooms();
}
else{
// This returns immediately despite being connected
Log.e("CONNECTION", "LOST");
finish();
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
解决方案
为什么一旦获得此引用,Firebase 就会返回 false,我该怎么做才能防止这种情况发生?
SDK 在能够首次连接到服务器之前不会认为自己“已连接”。在那之前,它是断开的。它最初并不是以“连接”的形式开始的。
如果您希望某些活动仅在应用程序连接时启动,则必须等到它连接后才能启动它。
推荐阅读
- c# - 从 C# 中的特定多维数组中提取列
- eclipse - glassfish 5 JSF2.2 & CDI 部署失败
- kubernetes - CI/CD 的 Helm 图表版本
- c# - MQ 错误原因:在 C# .NET 客户端正常工作多天后随机开始出现 2058
- php - laravel 路由中找不到页面错误
- javascript - 如何将每个用户路由/链接到他们自己的数据?
- docker - docker toolbox - 无法使用 docker-compose 挂载目录
- java - 线程“主”java.lang.IndexOutOfBoundsException 中的异常:
- php - 如何使密码验证功能与 $_POST 一起使用
- boost-asio - boost convinience 标头不包括必需的标头