2017-12-13 4 views
0

Cloud Firestoreデータベースからユーザーのデータを取得し、それをフラグメントに表示しようとしています。 Firestoreのクエリは非同期で動作するため、Firestore DBからすべてのデータがフェッチされる前にUIがロードされます。私のフラグメントのOnViewCreatedメソッドは、クエリが十分に速くない場合はnullデータを読み込みます。Firestoreはデータの取得中にローディングインジケータを表示します

この問題を回避するにはどうすればよいですか?クエリの処理中にローディングインジケータを表示する必要がありますか?もしそうなら、どのように完了したのか分かりますか?

また、Userクラスのデータを取得し、異なるインスタンス間で同じインスタンスを共有するのがベストプラクティスですか?

答えて

1

これを解決するには、Cloud Firestoreデータベースからドキュメントを取得しようとするときにaddOnCompleteListenerを使用する必要があります。つまり、onComplete()メソッドがトリガーされ、非同期動作があるため、別のメソッドを呼び出すか、そのメソッド内にUI要素を直接表示する必要があります。それ以外の場合は常にnullになります。

コールバックを追加して、そのメソッドの外側にもアクセスできるようにするもう1つの方法があります。そのためには、私は非同期の世界にダイビングして、この回答postから私の答えを見てください。これは、onDataChange()メソッドの外にデータを取得するためですが、ほぼ同じです。

最高のユーザーエクスペリエンスを得るために、ローディングインジケータを追加して、ユーザーが空白の画面を表示しないようにすることができます。

+0

答えをありがとう。なぜ 'addOnSuccessListener'ではなく' addOnCompleteListener'ですか?また、あなたがコメントabouot私の最後の質問を含めることができれば素晴らしいだろう。 –

+0

タスクが完了すると 'addOnCompleteListener'が呼び出されるので、その時点でUI要素を表示する必要があります。あなたが活動をするのと同じように、あなたは断片と関係している必要があります。 –

+0

ありがとうございます。そして実際にあなたがリンクしたポストがそのトリックをしました。 –

関連する問題