리스너 단일 값 이벤트를 설정하려고하는데 일반적으로 작동합니다. (새로 고침을 위해이 작업을 수행합니다. 앱을 종료하고 다시 열어도 작동합니다. 또는 Android 시스템에서 백그라운드에서 메모리를 회수하도록 할 수도 있습니다.)Firebase가 때때로 데이터베이스를 호출하지 않습니다.
아마도 특정 시간 (몇 시간) 후에 앱으로 돌아가서 액세스하려고하면 아래 코드가 더 이상 실행되지 않습니다. 그리고 그것은이 작동 불가능한 상태에 있습니다 (그러나 나는 모든 것이 거기에 있음을 확인합니다). 기본적으로 로그 아웃하고 다시 로그인 할 때까지 지속됩니다.
로그온을 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
가 그래서 일이 발사되어
은, 그냥 다시 데이터를 얻을하는 데 시간이 오래 걸리는을 ... 만약 그렇다면!
음 ... 죄송합니다. 한 번 트리거하면 괜찮습니다. 나는 새로 고침을 당긴다. 그리고 그것은 잘 발동한다. 응용 프로그램을 종료하고 백그라운드에서 실행되도록두고 시스템에서 메모리를 회수 (강제 종료)하고 다시 시작하면 계속 작동합니다. 그러나 나는 몇 시간 후에 내 전화를 떠나 다시 돌아오고 더 이상 방아쇠를 당길 수없는 것처럼 보이지 않으며 트리거 할 수없는 상태에 처하게됩니다. 그게 문제 야. – lawonga
예. 그것이'addListenerForSingleValueEvent()'의 의도 된 동작입니다. 그것은 한 번만 트리거하고, 더 이상은 트리거하지 않습니다. 특정 참조/자식에 대한 모든 이벤트를 수신하려면 'addValueEventListener()'를 사용해야합니다. –
아, 그래 ... 말이 되네. Firebase 문서는 (어쨌든 나에게) 때때로 오도하는 것 같다. 고마워, 시도 할 것이다! – lawonga