2017-10-18 9 views
0

私はある時点で、Query#addListenerForSingleValueEvent()メソッドを使用してFirebaseデータベースから変数を取得しています。コードは以下の通りである:onDataChangeが変数を取得した後に変数にアクセスする

void initCurrentUserProfile() { 
    mAuth = FirebaseAuth.getInstance(); 
    mUser = mAuth.getCurrentUser(); 
    mFirebaseDatabase = FirebaseDatabase.getInstance(); 

    DatabaseReference userProfileReference = mFirebaseDatabase.getReference().child("users"); 
    userProfileReference = userProfileReference.child(mUser.getUid()); 

    Query userProfileQuery = userProfileReference.orderByKey(); 
    userProfileQuery.addListenerForSingleValueEvent(new ValueEventListener() { 


     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

     // This is the variable that I want to get 
     mUserProfile = dataSnapshot.getValue(UserProfile.class); 
     } 
... 

私は私の活動のonCreate()ですぐにユーザデータを持つクラスですmUserProfileへのアクセスを、取得した画像にこの中に含まれているのURLをロードしたいですmUserProfile変数。

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    ... 
    initCurrentUserProfile(); 
    Picasso.with(this).load(Uri.parse(mUserProfile.getProfilePicUrl())).into(mProfilePictureImageView); 
} 

Firebaseデータベースの非同期性を、私はそれを行うとNullPointerException得ることができないため、問題は、次のとおりです。

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.example.grigori.fitnessapp.Profile.UserProfile.getProfilePicUrl()' on a null object reference 

あなたは私が順番にやるかもしれないものについての任意の提案はありますかこの変数にアクセスするには?それ以外の場合は常にnullになりますonCreate()方法でonDataChange()方法とないで

Picasso.with(this) 
    .load(Uri.parse(mUserProfile.getProfilePicUrl())) 
    .into(mProfilePictureImageView); 

右:

答えて

1

はい、あなたは、このコード行を呼び出す必要があります。

asynchronousの動作は、データベースからデータを取得しようとする前に、上記の行が呼び出され、その理由が常にnullであることを意味します。

+0

ありがとう、これで問題は解決しました。 –

関連する問題