Firebase ValueEventListenerに関して非常に奇妙な状況が発生しています。オフライン時にFirebase onDataChangeが呼び出されない
電話機がインターネットに接続されている場合、正常に動作します。しかし、オフラインのときは、onDataChangeを呼び出していません。
このコードはオフラインでも機能します。
mDatabase = FirebaseDatabase.getInstance()
.getReference()
.child(Database.PLACES)
.child(((BaseActivity) getActivity()).getUserId());
Timber.d("TRYING TO GET PLACES");
mDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Timber.d("GOT PLACES");
}
@Override
public void onCancelled(DatabaseError databaseError) {
Timber.w(databaseError.toException());
}
});
そして、それは私にこのログを与える:しかし
D/PlaceListFragment:207: TRYING TO GET PLACES
D/Persistence: Starting transaction.
D/Persistence: Saved new tracked query in 1ms
D/Persistence: Transaction completed. Elapsed: 3ms
D/EventRaiser: Raising 1 event(s)
D/EventRaiser: Raising /places/JLC2zqpSMFfYEGaUAfSTCHA2K4k1: VALUE: null
D/PlaceListFragment:211: GOT PLACES
、まったく同じコードではなく、DatabaseReference(パス)を変更すると、それは私にこのログを与え、動作しません。
D/AnalysisActivity$2$override:144: TRYING TO GET READS
D/Persistence: Starting transaction.
D/Persistence: Saved new tracked query in 0ms
D/Persistence: Loaded a total of 0 rows for a total of 0 nodes at /reads/-KdiPFBrnEBHaPGCbP86 in 1ms (Query: 1ms, Loading: 0ms, Serializing: 0ms)
D/Persistence: Transaction completed. Elapsed: 13ms
私は、トランザクションが完了してもこのイベントが呼び出されないようにする可能性があると考えられる理由は何ですか?
何が起こっている可能性がありますか?
OBS:私のユーザーがfirebase認証correcltyで認証されており、私はこの自分のアプリケーションの設定に設定されている:あなたが書き込みデータを共有コードで
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
FirebaseDatabase.getInstance().setLogLevel(Logger.Level.DEBUG);
あなたが共有するコードには何も書き込まれません。これは、Firebaseがキャッシュからデータを戻していることを意味します。それは空のスナップショットで起動するので、あなたが読もうとしている値は決してキャッシュされませんでした。 –
しかし、それは少なくともonCancelledイベントを引き起こすはずはありませんか?このコールバックを処理する方法が必要なので... –
権限がないときに 'onCancelled'が起動します。クライアントはアクセス権を持っているかどうか(サーバーに接続されていないため)、値が存在するかどうか(場所が決してキャッシュされていないため)はわかりません。 –