首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在onDataChange检索变量后获得对它的访问

在onDataChange检索变量后获得对它的访问
EN

Stack Overflow用户
提问于 2017-10-18 15:16:12
回答 1查看 108关注 0票数 0

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

代码语言:javascript
运行
复制
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变量中。

代码语言:javascript
运行
复制
@Override
protected void onCreate(Bundle savedInstanceState) {
    ...
    initCurrentUserProfile();
    Picasso.with(this).load(Uri.parse(mUserProfile.getProfilePicUrl())).into(mProfilePictureImageView);
}

问题是,由于Firebase数据库的异步特性,我无法做到并获得一个NullPointerException

代码语言:javascript
运行
复制
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.example.grigori.fitnessapp.Profile.UserProfile.getProfilePicUrl()' on a null object reference

对于我可以做些什么来访问这个变量,你有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-18 15:24:16

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

代码语言:javascript
运行
复制
Picasso.with(this)
    .load(Uri.parse(mUserProfile.getProfilePicUrl()))
    .into(mProfilePictureImageView);

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46813628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档