で呼び出されていない「onCancelled」、私は単純に次のコードでListenerForSingleValueEvent
を追加することによって、私のFirebase
データベースから読み取り通路を取得しよう:アンドロイドFirebase - 「OnDataChangeの」そして、私のアプリではありませんインターネット接続
myRef.child("passages").child(passageNum).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
System.out.println("ON DATA CHANGE");
}
@Override
public void onCancelled(DatabaseError databaseError) {
System.out.println("DATABASE ERROR");
FirebaseErrorHandler.handleDatabaseError(databaseError.getCode(), ReadingActivity.this);
}
});
インターネット接続があれば完璧に動作します。しかし、意図的にインターネット接続をオフにすると、onDataChange
もonCancelled
も呼ばれていません。 databaseError.getCode()
のエラーコードの2つがネットワーク接続の問題と関係しているので、これは非常に不満です。
インターネットがないためにこのデータを取得できない場合は、このリスナーに画面が常に表示されるのではなく、少なくともユーザーに知らせる必要があります。これを解決する方法はありますか? Firebase's
REST APIに頼らざるを得ませんか?少なくともRESTfulネットワーク要求では、接続が失敗したかどうかを知らせます。
これは解決策ですが、望ましいものではありません。私はfirebaseデータベースへのクエリを行う前にインターネットの可用性をチェックすることができますが、それは私のアプリを100%オフラインにしておきたいのでうまくいかないでしょう。私がインターネット接続なしで初めてアプリを起動したとき、firebaseデータベースはデータを持たず、コールバックにはまっていないとします。インターネット接続が少なくとも最初に提供された場合、この問題は後続の実行で消えます。このシナリオに取り組む方法は? Firebaseが少なくともonCancelled()にこの情報を提供すれば本当に良いでしょう。 –
@AritraRoyこの問題をどうやって処理しましたか?あなたはこれに対する解決策を見つけましたか? –
これは本当に残念ですが、クエリを実行する前にフラグをチェックする必要があります。 **単一値**イベントリスナーの場合、値を取得できなかった場合、firebaseはエラーを返します。現在の動作は、アプリが対処するために、この複雑さをすべて押し上げるだけです。 –