从Firebase获取数据后执行功能

时间:2019-02-18 20:16:01

标签: android firebase firebase-realtime-database

我尝试创建简单的应用讲师—学生。登录时,我从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()

1 个答案:

答案 0 :(得分:-1)

我有一个同样的问题,因为Firebase事件列表器在单独的线程中工作,所以我认为您的updateUI()在主线程中,因此它在mDatabase事件列表器之后执行,但是事件列表器在单独的线程中工作,所以我将updateUI方法放在eventListner内