我试图设置一个侦听器单值事件,它通常会起作用。 (通过拉动刷新来实现这一点 - 即使我杀死应用程序并重新打开,或者让android系统在后台回收内存,它也能正常工作)。
然而,经过一段时间(几个小时)后,我回到应用程序并试图访问它,下面的代码不再发生了。它保持在这种不可操作的状态(但我确认一切都在那里)。它会一直持续到我退出并重新登录。
我在onDataChange方法中放了一个日志而且它没有触发。我把它放在它外面它会发射。
这是我的代码:
FirebaseDatabase.getInstance()
.getReference()
.child(context.getString(R.string.firebase_jobs))
.child(userId).
addListenerForSingleValueEvent(
new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot jobSnapShot : dataSnapshot.getChildren()) {
JobItem jobItem = jobSnapShot.getValue(JobItem.class);
// Add the ID into the jobItem
jobItem.setId(dataSnapshot.getKey());
// Set the jobItem
arrayList.add(jobItem);
subscriber.onNext(jobItem);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.e(TAG, "onCancelled: " + databaseError.getMessage());
}
});
}
有没有人经历过有时无法在代码中调用的代码?谢谢!
编辑:我尝试在触发时注销并收到日志错误消息:
E/FirebaseRetrieveData: onCancelled: Permission denied
所以事情就是解雇,这需要很长时间才能恢复数据......如果有的话!
答案 0 :(得分:1)
这是addListenerForSingleValueEvent()的预期行为。如文档中所述:
触发一次,然后不再触发。
除非你的目标不同?我误解了你帖子里的内容吗?你的目标是你只是听一个特定的单一价值吗?如果是,我认为您应该使用addValueEventListener()
代替。
修改强>
以防其他人看到这一点。以下是addListenerForSingleValueEvent()的最新文档链接。