繁体   English   中英

Firebase Firestore 异步行为问题

[英]Firebase Firestore asynchronous behavior problem

在这里,我试图在 onStart 方法中从 firestore 获取用户配置文件数据。 firebase 的 onSuccess 是异步行为,所以 onCreate 方法中的TOAST会产生空指针异常。 有什么方法可以延迟 onCreate 调用,直到 onSuccess 完成,即从 Firestore 中获取数据。

注意:我想在执行 onCreate 方法之前加载用户配置文件数据 object。

    @Override
protected void onStart() {
    super.onStart();
    firestore = FirebaseFirestore.getInstance();
    firestore.collection("users").document(cUserEmail).get()
            .addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
                @Override
                public void onSuccess(DocumentSnapshot documentSnapshot) {
                    user = new User(documentSnapshot.getString("name")
                            , documentSnapshot.getString("email")
                            , documentSnapshot.getString("rollNumber")
                            , documentSnapshot.getString("mobileNumber")
                            , documentSnapshot.getString("password")
                            , documentSnapshot.getString("department")
                            , documentSnapshot.getString("semester"));
                }
            });

}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_std);
    findViews();

    Toast.makeText(this, user.getName(), Toast.LENGTH_SHORT).show();
}

我认为您尝试获取的数据需要一些时间,并且 api 调用在获取数据之前在线程上运行,在用户仍然是 null 的地方调用 toast 消息代码。

解决方案1:在数据成功时写入toast消息。

解决方案 2:尝试显示加载,直到获取数据。

注意:在 onStart 中获取数据不是一个好习惯

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM