0
データベース内のノードを読み取り、取得した値を単一のメソッドで返そうとしています。コードを実行すると、データはコンソールに記録されますが、このメソッドはnull値を返します。私は知っonDataChangedメソッドからデータを返す方法
:
私はFirebaseは/バックグラウンドで自動的にデータベースのでonDataChanged内のコードが最後に実行されると同期取得していることを知っています。私はを知らない何
:onDataChanged方法から得た値を返すために、私の方法を取得する方法を
。
マイコード:
public static String telephone;
public static String getMyNumber(){
final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
DatabaseReference r = FirebaseDatabase.getInstance().getReference().child("users").child(user.getUid()).child("phone");
r.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
telephone = dataSnapshot.getValue(String.class);
Log.d("YourTag", telephone);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
return telephone;
}
あなた 'getMyNumber'方法は、メインスレッド上で同期的に実行されます。データは別のスレッドでFirebaseデータベースから非同期に取得されます。通常のJava/JVMをターゲットにしている場合は、セマフォを使用して2つを同期させることができます。 Androidではこれは不可能です。私の答えはこちらをご覧ください:http://stackoverflow.com/questions/33203379/setting-singleton-property-value-in-firebase-listener/33204705#33204705 –
コメントありがとうございました。私はAndroidで働いています。 –
その場合、Firebase(および最新のクラウドサービス)の非同期性を取り入れた別のオプションはありません。 –