【发布时间】:2018-12-18 01:59:09
【问题描述】:
我遇到了一个关于 Firebase 实时数据库 的问题,特别是多次触发的值事件侦听器。似乎当互联网状态从打开到关闭多次并且设备终于有稳定的连接监听器的onDataChange(DataSnapshot dataSnapshot)回调方法被空内容的dataSnapshot调用。似乎实时数据库是指应用程序的本地缓存和在那种情况下,我没有存储任何数据。我在 Activity onStart() 内或设备已建立某些连接时附加侦听器;我在 Activity onStop() 方法内或设备断开互联网连接时分离侦听器。一次仅存在一个给定侦听器的实例,并且每个附加都在需要时执行相应的分离操作。我试图在连接监听器之前等待连接状态的变化,如果数据快照返回 null 则重新连接监听器。这些都不起作用。请建议解决方案。
Activity 中的一些示例代码:
private ValueEventListener listener;
private Query query;
private boolean hasAttachedListener;
private Query getDatabaseReference() {
DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
return reference.child(“some child ref”)
.child(“other child ref 2 ”);
}
private ValueEventListener getDatabaseListener() {
return new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.d(“firebase”, dataSnapshot.toString());
//issue here datasnapshot is null sometimes
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.d(“firebase”, databaseError.getDetails());
}
};
}
/**
* Attaches listener
*/
public void addListener() {
if (!hasAttachedListener) {
query = getDatabaseReference();
listener = getDatabaseListener();
query.addValueEventListener(listener);
hasAttachedListener = true;
}
}
/**
* Detaches the attached listener
*/
public void removeListener() {
if (hasAttachedListener) {
query.removeEventListener(listener);
query = null;
listener = null;
hasAttachedListener = false;
}
}
@Override
protected void onStart() {
super.onStart();
addListener();
}
@Override
protected void onStop() {
super.onStop();
removeListener();
}
@Override
protected void onNetworkDisconnected() {
super.onNetworkDisconnected();
// invoked when internet connection is lost
removeListener();
}
@Override
protected void onNetworkReconnected() {
super.onNetworkReconnected();
// invoked when internet connection is restored
addListener();
}
【问题讨论】:
-
您好,提供的链接是一个指南。我有一个使用 Firebase 服务的工作应用程序!问题在于事件侦听器缓存信息不正确。我已联系 Firebase 支持以重新处理此问题,他们已确认我正确使用了实时更新功能,但他们无能为力。
-
请添加您正在使用的代码。
-
@AlexMamo 代码添加
-
您是否尝试删除
onNetworkDisconnected和onNetworkReconnected,因为不需要这些方法。
标签: android firebase null real-time-updates