私はAndroidベースのアプリケーションで、FirebaseとAndroid Studioを使って作業しています。 onDataChange
メソッド内で値を設定することができなかったため、バリューイベントリスナーで値を取得する際に問題が発生しました。非同期で実行されるため、リスナーが目的を完了していない可能性があります。だから、私はこの問題をonDataChange
メソッド(実際の人生保護人!)の中で何かをすることで解決しました。2つのバリューイベントリスナーをネストすると、それらは両方とも非同期で実行されるのでしょうか、または低い方のイベントリスナーが完了するのを待っていますか?
しかし
私はonDataChange
に取得していた値はまた、別のリスナー内で必要になることを起こります。このように
DatabaseReference mLastnameReference = rootRef.child("users").child("12345678").child(phone);
ValueEventListener lastnameListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
try {
yourid = dataSnapshot.getValue().toString();
}
catch (NullPointerException e){
//handle user not registered here
}
DatabaseReference mBioReference = FirebaseDatabase.getInstance().getReference().child("users").child(yourid).child("status");
ValueEventListener bioListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Status = dataSnapshot.getValue().toString();
mTextField = (TextView) findViewById(R.id.status);
mTextField.setText(Status);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
mBioReference.addValueEventListener(bioListener);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
mLastnameReference.addValueEventListener(lastnameListener);
第1リスナーで待っている値はyourid
です。ネストされたリスナーを実行するためのノードへのデータベース参照を取得するには、その値も必要です。しかし、私はこのコードを実行すると、両方が同時に実行されているように見えます。したがって、その時点でyouridが取得されていないように見えるため、ネストされたデータベース参照に対してnull例外が発生します。