java - 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();
}
解决方案
我认为您尝试获取的数据需要一些时间,并且 api 调用在获取数据之前在线程上运行,在用户仍然为空的地方调用 toast 消息代码。
解决方案1:在数据成功时写入toast消息。
解决方案 2:尝试显示加载,直到获取数据。
注意:在 onStart 中获取数据不是一个好习惯
推荐阅读
- reactjs - 通过滚动到预定义的组件/节点来触发动画
- html - 本地主机不显示 img 但 index.html 显示
- javascript - 多个雷达图 MDB 未显示
- c# - C# WinForms 无模式对话框关闭
- raspberry-pi - 树莓派 openvpn:错误:无法打开 TUN/TAP
- javascript - 父状态 -> 子组件 -> 使用 onClick 渲染组件不起作用
- python - 在 Django 中获取用户输入的最简单方法是什么?
- android - 如何使子组件能够更改父组件的应用栏?
- reactjs - 使用传递给子项的道具从对象的 arr 访问数据 - 错误
- vb.net - 为什么将数组声明为常量时推断不起作用