addListenerForSingleValueEvent
を使用してFirebaseからデータをフェッチするときに、どのように接続/読み取りタイムアウトを追加しますか? addListenerForSingleValueEvent
を使用してデータを取得する呼び出しを行うと、ProgressBar
が表示され、データがonDataChange
にフェッチされたときまたはonCancelled
に何らかのエラーが発生したときに再びProgressBar
が表示されなくなります。しかし、インターネット接続がない場合、は、onDataChange
またはonCancelled
が決して呼び出されないため、永遠に見えます。 ProgressBar
をもう一度見えなくするにはどうすればよいですか?私はタイムアウトはこれの良い解決策だと思うが、ファイアウォールAPIでタイムアウトのようなものは見つからない。タイムアウトから離れてこの問題を解決する別の方法があるなら、私に知らせてください。ありがとう。firebaseデータベースから値を読み取るときにタイムアウトしますか?
2
A
答えて
1
@Doug Stevensonによると、Firebase APIにはタイムアウトのようなものはないので、タイムアウトは独自のロジックを使用して処理する必要があります。これは私のコードでタイムアウトを実装する方法です。
private void getDataFromFirebase()
{
final boolean[] gotResult = new boolean[1];
gotResult[0] = false;
FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
DatabaseReference dataReference = firebaseDatabase.getReference().child("data");
ValueEventListener dataFetchEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
gotResult[0] = true;
// You code goes here
}
@Override
public void onCancelled(DatabaseError databaseError) {
gotResult[0] = true;
}
};
if(isNetworkAvailable()) {
dataReference.addListenerForSingleValueEvent(dataFetchEventListener);
Timer timer = new Timer();
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
timer.cancel();
if (gotResult[0] == false) { // Timeout
dataReference.removeEventListener(dataFetchEventListener);
// Your timeout code goes here
}
}
};
// Setting timeout of 10 sec to the request
timer.schedule(timerTask, 10000L);
}
else{
// Internet not available
}
}
関連する問題
- 1. Firebaseデータベースからデータを読み取る
- 2. AndroidのFirebaseデータベースから複数の値を読み取る
- 3. Firebaseデータベースの読み込みクエリにタイムアウトを設定する
- 4. Firebaseデータベースから値を読み取ってHTMLテーブルに格納する方法
- 5. Firebaseデータベースからデータを読み込む
- 6. firebaseデータベースからサブセクションを読み取る方法
- 7. Firebaseデータベースからデータリストを読み取る際のNullモデルオブジェクト
- 8. Android StudioのFirebaseデータベースから値を1つだけ読み取る方法は?
- 9. エラーFirebaseから読み取るときに "java.util.HashMap型の値をStringに変換できませんでした"
- 10. URLからJSONを読み取るときに接続タイムアウトが発生する
- 11. firebaseデータベースから "Location"オブジェクトを読み込みます
- 12. Firebaseデータベースからのデータ読み込みに関する問題
- 13. SQLiteデータベースから読み取ることができません
- 14. firebaseデータベースにアクセスできない(読み取りルールをtrueにしているにもかかわらず)
- 15. Android、firebaseデータベースから値を取得
- 16. firebaseデータベースから値を取得できません
- 17. firebaseデータベースから値を取得できません
- 18. データベースからテーブルを読み取る
- 19. データベースからファイルを読み取る
- 20. データベースからMVCデータを読み取る
- 21. Django ChoiceFieldデータベース値から読み込み
- 22. Firebaseデータベースから値を取得するためのキーを読み取る方法は?
- 23. SQLiteデータベースから読み取ることができません。アクティビティカーソルからデータを取得中にクラッシュする
- 24. クエリを通じてmysqlデータベースからデータ値を読み取る
- 25. 意図的に読み取り/書き込みタイムアウトが発生しますか?
- 26. Firebaseから条件付きでデータを読み取る
- 27. Sqliteのデータベースから値を読み取る
- 28. Openshift online v3 - デーモンプロセスから応答ヘッダーを読み取るときのタイムアウト
- 29. androidデータベース、ファイルから読み取る
- 30. FTPClient - ソケットストリームからデータを読み取ろうとしたときにタイムアウトしました
FirebaseデータベースAPIにはタイムアウトはありません。しばらくしてからリッスンを止めたい場合は、独自の仕組みを使用する必要があります。 –
答えはダグのように聞こえます。 :-) –
@DougStevensonありがとう。私はこれがすぐにカードにあることを願っています。 –