在onDataChange之后获取对变量的访问权已检索到它

时间:2017-10-18 15:16:12

标签: android firebase firebase-realtime-database

我有一个应用程序,它一度使用Query#addListenerForSingleValueEvent()方法从Firebase数据库中检索变量。代码如下:

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);
        }
...

我希望能够访问mUserProfile,这是一个包含用户数据的类,我的活动的onCreate()会立即加载其中包含此网址的图片mUserProfile 1}}变量。

@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

对于我可能会做什么以获取对此变量的访问权限,您有什么建议吗?

1 个答案:

答案 0 :(得分:1)

是的,你需要调用这行代码:

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

onDataChange()方法中,而不在onCreate()方法中,否则它将始终为空。

asynchronous行为意味着在您尝试从数据库获取数据之前调用上面的行,并且为什么始终为null。