これは私のfirebaseを初めて使用したもので、同じクラスに含まれているすべてのメソッドがあります。 nameExistsは、nameに格納されている値がnullでないことをコンソールで確認できる場合でも、常にfalseを返します。 userStatusは、このクラスのDataSnapshotフィールドです。ヘルプFirebaseデータベースがデータを取得していない
1
A
答えて
2
ため
public Boolean nameExists(String name){
if (getUserStatus(name) != null){
return true;
} else{ return false; }
}
public String getUserStatus(String name){
DatabaseReference tmpRef = FirebaseDatabase.getInstance().getReference().child("userStatuses").child(name);
ValueEventListener v = new statusesListener();
tmpRef.addValueEventListener(v);
tmpRef.removeEventListener(v);
return userStatus;
}
private class statusesListener implements ValueEventListener{
public void onDataChange(DataSnapshot snap){
userStatus = (String) snap.getValue();
}
public void onCancelled(DatabaseError error){
}
}
おかげであなたはValueEventListener
コールバックの非同期性を見落としています。リスナーが追加されるとき、通常、値がonDataChange()
コールバックによって提供される前にFirebaseサーバーからフェッチされることが必要です。コールバックは、リスナーが追加されてから数ミリ秒後に非同期で発生します。
コードでgetUserStatus()
はstatusesListener
を追加してから削除し、userStatus
を返します。そのすべてはonDataChage()
が起動する前に発生するため、userStatus
の値は変更されません。
また、ValueEventListener
を追加してすぐに削除するのは、典型的な使用例ではなく、リスナーの非同期性を考慮すると、決して起動しない可能性があります。 Query.addListenerForSingleValueEvent()というリスナーを追加することをお勧めします。これは値を一度与えるため、リスナーを削除する必要はありません。
関連する問題
- 1. Firebaseがデータを取得しない(iOS)
- 2. firebaseデータベースから取得したデータが表示されない
- 3. firebaseデータベースからデータを取得しています
- 4. Firebaseデータベースのデータを取得していますか?
- 5. Firebaseデータベース - データベースからデータを取得
- 6. firebaseがデータベースから削除したデータを取得しています
- 7. は私がfirebaseデータベースからデータを取得しようとしていたWeb
- 8. Firebaseがデータベースから値を取得しない
- 9. Firebaseデータベースがアイテムの一部を取得しない
- 10. オプションのFirebaseデータベース値を取得しないでください。
- 11. FirebaseデータベースWEBはJSONでデータを取得
- 12. addValueEventListenerを使用してfirebaseデータを取得できない
- 13. 新しいFirebaseがデータを取得してtableView(Swift)に置く
- 14. PHPがMySQLデータベースから正しいデータを取得していない
- 15. リファレンスがデータを取得してもAndroidでFirebaseクエリが機能しない
- 16. Xamarin.Firebase.Databaseを使用してFirebaseデータベースからデータを取得する
- 17. データの取得にFirebaseが遅い
- 18. firebaseからデータを取得していますがフェイスインデックスエラー
- 19. Firebaseデータベースのすべての子のデータを取得します
- 20. firebaseからのデータ取得が機能しない
- 21. 大きなFirebaseデータベースの表面的なデータを取得する
- 22. firebaseからデータを取得して定義されていない
- 23. firebase私はfirebase、データベース内の情報を取得しようとしている
- 24. Firebaseデータベースからの値を取得していません
- 25. フォームが別のデータベースからデータを取得しない
- 26. GoogleTagManagerのfirebaseがiosからデータを取得できない
- 27. データベースからデータを取得したい
- 28. PHPがデータベースからデータを取得しています
- 29. Android Firebaseで更新されたデータを取得しないクエリ
- 30. 私はFirebaseからデータを取得しようとしていますFirebase
しかし、データを一度しか取得する必要はありません。恐らく、リスナーが追加されるとデータが取得され、値が変更されると再びデータが取得される恐れがあります。 userStatusが更新されるまでに数ミリ秒かかる場合は、userStatus値を使用する前にどれくらい待たなければならないのか、どのようにこの遅延を実装するのか、そしてuserStatusが実際に更新されたことを確認する方法ユーザーはインターネット接続や奇妙なケースを失っただけではありません。また、なぜこのコンセプトはGoogleのFirebaseガイドにもないのですか?この縫い目は重要なメモのように追加して、回避策を提示する必要があります。 –
'addListenerForSingleEvent()'で追加されたリスナーは、一度だけ起動します。これは[1回のデータを読む]セクションの[ドキュメント](https://firebase.google.com/docs/database/android/retrieve-data)に記載されています。遅延や待機に関しては、デザインはイベント駆動型でなければなりません。コードがメイン(UI)スレッドで実行されていると仮定すると、非同期応答を待機するようにブロックすることはできません。 –
次に、取得したデータがいつ取得されたかわからない場合、取得したデータをどのように使用するのですか? –