首页 > 解决方案 > Firebase Firestore 异步行为问题

问题描述

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

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

    @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();
}

标签: javaandroidfirebasegoogle-cloud-firestore

解决方案


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

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

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

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


推荐阅读