Firebase有时不会调用数据库

时间:2016-06-03 07:27:12

标签: android firebase

我试图设置一个侦听器单值事件,它通常会起作用。 (通过拉动刷新来实现这一点 - 即使我杀死应用程序并重新打开,或者让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

所以事情就是解雇,这需要很长时间才能恢复数据......如果有的话!

1 个答案:

答案 0 :(得分:1)

这是addListenerForSingleValueEvent()的预期行为。如文档中所述:

  

触发一次,然后不再触发。

除非你的目标不同?我误解了你帖子里的内容吗?你的目标是你只是听一个特定的单一价值吗?如果是,我认为您应该使用addValueEventListener()代替。

修改

以防其他人看到这一点。以下是addListenerForSingleValueEvent()的最新文档链接。