一度だけデータを取得したいのにキャッシュを返される
DatabaseReference ref = database.getReference().child("data");
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// 最新データが取得できるとおもいきや…
}
@Override
public void onCancelled(DatabaseError databaseError) {
});
database.setPersistenceEnabled(true);
としているとFirebaseはローカルにデータをキャッシュをする場合があり(場合があるというのは、キャッシュは消される可能性もあるため)、その時そのキャッシュがonDataChange
として渡される場合がある。複数回コールバックを受け取るなら問題はないが、addListenerForSingleValueEvent
でもキャッシュが返されるので困る。
取得したリファレンスに対してref.keepSynced(false);
としてやるとうまく取得できるようになる。
Firebase Tips - or NEW