Firebase .info / connected显示错误的连接状态

时间:2016-10-25 06:42:23

标签: android firebase firebase-realtime-database firebase-authentication

我正在使用Firebase中的状态系统显示"在线",如果我的客户端已连接到网络,并且"离线",如果连接以某种方式丢失。

这对我的客户来说非常重要,因为它表示,如果用户现在可以发送消息。

它有时效果很好,有时候不是而且存在问题。

这就是我正在做的事,

mConnectionRef = FirebaseDatabase.getInstance().getReference(".info/connected");
        mConnectionRef.addValueEventListener(mPresenceListener);

这个,

private ValueEventListener mPresenceListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot snapshot) {
            boolean connected = snapshot.getValue(Boolean.class);
            Timber.d("Connected: %s", connected);
            Presence.getInstance().setIsOnline(connected);
            if (connected) {
                if (mPresenceStatus != null) {
                    mPresenceStatus.setText(ResourceUtils.getString(R.string.label_online));
                    Drawable image = ResourceUtils.getDrawable(R.drawable.ic_presence_online);
                    mPresenceStatus.setCompoundDrawablesWithIntrinsicBounds(image, null, null, null);
                }
            } else {
                mPresenceStatus.setText(ResourceUtils.getString(R.string.label_offline));
                Drawable image = ResourceUtils.getDrawable(R.drawable.ic_presence_offline);
                mPresenceStatus.setCompoundDrawablesWithIntrinsicBounds(image, null, null, null);
            }
        }

        @Override
        public void onCancelled(DatabaseError error) {
            Presence.getInstance().setIsOnline(false);
            mPresenceStatus.setText(ResourceUtils.getString(R.string.label_offline));
            Drawable image = ResourceUtils.getDrawable(R.drawable.ic_presence_offline);
            mPresenceStatus.setCompoundDrawablesWithIntrinsicBounds(image, null, null, null);
        }
    };

有时,在客户端闲置很长一段时间然后我打开应用程序后,我可以看到它打印出来了#34;已连接:真实"然后立即打印"已连接:false"即使客户端有可用的网络连接,这也会每2-3秒重复一次。

现在解决这个问题的方法是使用mFirebaseUser.logout()注销并再次登录,然后监听器工作正常。

现在,如果我再次使用该应用程序几个小时,则会再次出现此问题,并且侦听器开始出现异常行为。

我在这里做错了什么?实际问题是什么?如何解决这个奇怪的问题?

任何帮助都将受到高度赞赏。

0 个答案:

没有答案