我有一个应用程序,它一度使用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
对于我可能会做什么以获取对此变量的访问权限,您有什么建议吗?
答案 0 :(得分:1)
是的,你需要调用这行代码:
Picasso.with(this)
.load(Uri.parse(mUserProfile.getProfilePicUrl()))
.into(mProfilePictureImageView);
在onDataChange()
方法中,而不在onCreate()
方法中,否则它将始终为空。
asynchronous
行为意味着在您尝试从数据库获取数据之前调用上面的行,并且为什么始终为null。