Firebase根据存储在数据库中的不同值打开不同的活动

时间:2019-01-21 06:41:44

标签: java android firebase-realtime-database firebase-authentication

我正在检查当前用户是否已登录我的应用程序,并且从未注销过。如果为true,则在启动我的应用程序后,它将打开Activity A / B,具体取决于存储在数据库中的userDepartment的值。

我的代码如下:

        firebaseAuth = FirebaseAuth.getInstance();
    FirebaseUser user = firebaseAuth.getCurrentUser();

    //user has logged in and never once logged out. auto bring to the specific dashboard page based on account type.
    if (user != null) {
        finish();
        final String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
        DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference().child("userDepartment").child(uid);
        if (databaseReference.equals("Administrator")) {
            startActivity(new Intent(MainActivity.this, SecondActivity.class));
        } else {
            startActivity(new Intent(MainActivity.this, LocalUserDashboard.class));
        }
    }

该逻辑不起作用,因为当我以管理员身份登录时,关闭应用程序但未注销,预期结果是管理员用户将被带到SecondActivity类。但是,它改为打开LocalUserDashboard类。然后,如果我以本地用户身份登录,请关闭该应用程序但未退出,这确实使我进入了LocalUserDashboard类,

我不确定我的代码是否正确,同时取决于SO中的各种来源以及官方文档,还只是将所有内容混在一起了。

请帮助我。谢谢。

下面是我的数据库结构:

enter image description here

1 个答案:

答案 0 :(得分:1)

您直接与databaseReference进行比较,请首先执行请求,以使用受尊敬的userId从Firebase获取数据

databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if(dataSnapshot!=null)
        {
          String userDepartment = dataSnapshot.child("userDepartment").getValue());
          //Now check with this userDepartment
          if (userDepartment .equals("Administrator")) {
             startActivity(new Intent(MainActivity.this, SecondActivity.class));
          } else {
            startActivity(new Intent(MainActivity.this, LocalUserDashboard.class));
        }
    }

}