首页 > 解决方案 > 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) {

            }
        });

标签: javaandroidfirebase-realtime-database

解决方案


为什么一旦获得此引用,Firebase 就会返回 false,我该怎么做才能防止这种情况发生?

SDK 在能够首次连接到服务器之前不会认为自己“已连接”。在那之前,它是断开的。它最初并不是以“连接”的形式开始的。

如果您希望某些活动仅在应用程序连接时启动,则必须等到它连接后才能启动它。


推荐阅读