我正在使用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()注销并再次登录,然后监听器工作正常。
现在,如果我再次使用该应用程序几个小时,则会再次出现此问题,并且侦听器开始出现异常行为。
我在这里做错了什么?实际问题是什么?如何解决这个奇怪的问题?
任何帮助都将受到高度赞赏。