Firebaseでクエリを実行し、データベースサーバに到達できない場合、コールバックは永遠に(またはサーバが再び到達可能になるまで)待機することに気付きました。Firebaseでクエリのタイムアウトを処理する方法
この動作は、使用される非同期アプローチでは当然ですが、タイムアウトを指定する簡単な方法を使用して、ユーザーにステータスを知らせることができます。
このようなオプションがあり、私はそれを逃したばかりか、それとも本当に欠けていますか? またはこの問題をどのように解決しますか?
Firebaseでクエリを実行し、データベースサーバに到達できない場合、コールバックは永遠に(またはサーバが再び到達可能になるまで)待機することに気付きました。Firebaseでクエリのタイムアウトを処理する方法
この動作は、使用される非同期アプローチでは当然ですが、タイムアウトを指定する簡単な方法を使用して、ユーザーにステータスを知らせることができます。
このようなオプションがあり、私はそれを逃したばかりか、それとも本当に欠けていますか? またはこの問題をどのように解決しますか?
あなたはfirebaseの参照にリスナーをx秒後に削除すると自分自身を管理することができます。それは非常に単純です、たとえばAndroidのコードの1行だけです。
あなたがウェブ(デタッチコールバックセクション)のコードを見ることができます:https://www.firebase.com/docs/web/guide/retrieving-data.html
やAndroid用 (デタッチコールバックセクション):IOSのための https://www.firebase.com/docs/android/guide/retrieving-data.html#section-detaching
同じセクション;)
observeSingleEventOfType、これはハンドルを取得しないため、コールバックをデタッチできなくなります。 – Amit
として、今日、これらのリスナーにはタイムアウトの概念はありません。 1つの方法は、タイムアウトを自分で管理することです。
これは、コンテンツのロード中に進行状況ダイアログも表示したいときに行う方法です。
private void showProgressDialog(boolean show, long time) {
try {
if (progressDialog != null) {
if (show) {
progressDialog.setMessage("Cargando...");
progressDialog.show();
new Handler().postDelayed(new Runnable() {
public void run() {
if(progressDialog!=null && progressDialog.isShowing()) {
progressDialog.dismiss();
Toast.makeText(ActPreguntas.this, "Couldn't connect, please try again later.", Toast.LENGTH_LONG).show();
}
}
}, time);
} else {
progressDialog.dismiss();
}
}
}catch(IllegalArgumentException e){
}catch(Exception e){
}
}
だから、ダイアログ静止画がある場合、それは接続できませんでした、あなたは、あなたがタイムアウトごとなどに持って何をので、あなたが(、5000真)と5秒後にshowProgressDialogを呼び出すFirebaseするための要求を行うとき。このshowProgressDialogが行うFirebaseリスナーのコールバックで
(偽、0)
はそれがお役に立てば幸いです。
ユーザがFirebaseサーバに接続されているかどうかを検出する場合は、['.info/connected'](https://www.firebase.com/docs/web/guide/offline)をご覧ください。 -capabilities.html#section-connection-state)。 –
同じ問題に直面していました。最後に、タイマーをタイムアウトとしてマークするためにクエリの周りに置く。 Borstzフレームワークを使用してタスクを管理する(BFTask)、特に複数のクエリを扱う場合には、プロセス全体が簡単でした。 – Amit