我有一个应用程序,它曾经使用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()中立即包含用户数据的类,并加载图片,其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对于我可以做些什么来访问这个变量,你有什么建议吗?
发布于 2017-10-18 15:24:16
是的,您需要调用这一行代码:
Picasso.with(this)
.load(Uri.parse(mUserProfile.getProfilePicUrl()))
.into(mProfilePictureImageView);就在onDataChange()方法中,而不是在onCreate()方法中,否则它将始终为空。
asynchronous行为意味着在尝试从数据库获取数据之前调用上面的行,这就是为什么始终为null。
https://stackoverflow.com/questions/46813628
复制相似问题