我尝试创建简单的应用讲师—学生。登录时,我从Firebase接收布尔数据,以检查用户是学生还是讲师。然后我进入“主视图”。问题在于,更新视图的速度快于接收数据的速度,并且总是在打开应用程序后首次登录不正确。它显示了SharedPrefference的默认值(获取布尔值后,我将其共享给家庭活动)。就像下面的代码一样:
mDatabase.child("Users").child(mAuth.getCurrentUser().getUid()).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
User data = dataSnapshot.getValue(User.class);
lecturer = data.getLecturer();
editor.putBoolean("Lecturer", lecturer).commit();
}
}
updateUI();
然后我在家庭活动中得到了
boolean lecturer = pref.getBoolean("Lecturer", false);
if(lecturer == false) {
setFragment(studentHome);
} else {
setFragment(lecturerHome);
}
我的问题有没有简单的解决方案?我想创建一种承诺,先接收数据,然后再更新UI()
答案 0 :(得分:-1)
我有一个同样的问题,因为Firebase事件列表器在单独的线程中工作,所以我认为您的updateUI()在主线程中,因此它在mDatabase事件列表器之后执行,但是事件列表器在单独的线程中工作,所以我将updateUI方法放在eventListner内