Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将多种类型的用户重定向到各自的活动?_Java_Android_Firebase_Android Studio_Firebase Authentication - Fatal编程技术网

Java 如何将多种类型的用户重定向到各自的活动?

Java 如何将多种类型的用户重定向到各自的活动?,java,android,firebase,android-studio,firebase-authentication,Java,Android,Firebase,Android Studio,Firebase Authentication,我正在Firebase上创建一个投票应用程序。我有3种类型的用户。到目前为止,我可以成功地将两种用户(学生、教师)重定向到各自的活动,在他们使用下面的代码登录之后, 但现在我必须添加另一个用户(管理员),和其他用户一样,管理员也应该在登录后重定向到他们自己的特定活动。我对如何为第三个用户修改代码感到困惑 mAuthListener = new FirebaseAuth.AuthStateListener() { @Override public void onAu

我正在Firebase上创建一个投票应用程序。我有3种类型的用户。到目前为止,我可以成功地将两种用户(学生、教师)重定向到各自的活动,在他们使用下面的代码登录之后, 但现在我必须添加另一个用户(管理员),和其他用户一样,管理员也应该在登录后重定向到他们自己的特定活动。我对如何为第三个用户修改代码感到困惑

mAuthListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(FirebaseAuth firebaseAuth) {
            FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
            if (mAuth.getCurrentUser() != null) {

                String uid = mAuth.getInstance().getCurrentUser().getUid();
                DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
                uidRef = rootRef.child("STUDENTS").child(uid);

                ValueEventListener valueEventListener = new ValueEventListener() {
                    @Override
                    public void onDataChange(com.google.firebase.database.DataSnapshot dataSnapshot) {
                        if (dataSnapshot.exists()) {
                            //start students activity
                            startActivity(new Intent(MainActivity.this, student.class));

                        } else {
                            //start teachers activity
                            startActivity(new Intent(MainActivity.this, teacher.class));
                        }
                    }

                    //
                    @Override
                    public void onCancelled(DatabaseError databaseError) 
                    {
                    }
                };


uidRef.addListenerForSingleValueEvent(valueEventListener);

            }
            else{
                Log.d("TAG", "firebaseUser is null");
            }


        }
    };

您需要另一个数据结构,包含
用户
角色/管理员
角色/教师
角色/学生
,然后检查哪个节点具有密钥(也与安全规则兼容)

现在,您可以简单地删除
else
分支并查询所有三个节点。

使用onlye
if(dataSnapshot.exists())
无法解决三种类型的用户问题。假设第三个用户的类型为
3
,则需要更改数据库结构。因此,您的新数据库架构应该如下所示:

Firebase-root
    |
    --- users
          |
          --- uidOne
          |     |
          |     --- name: "Ed"
          |     |
          |     --- type: 1
          |
          --- uidTwo
          |     |
          |     --- name: "Tyff"
          |     |
          |     --- type: 2
          |
          --- uidOne
                |
                --- name: "Admin"
                |
                --- type: 3
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = rootRef.child("users").child(uid);
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if(dataSnapshot.child("Type").getValue(Long.class) == 1) {
            startActivity(new Intent(MainActivity.this, student.class));
        } else if (dataSnapshot.child("TYPE").getValue(Long.class) == 2) {
            startActivity(new Intent(MainActivity.this, teacher.class));
        } else if (dataSnapshot.child("TYPE").getValue(Long.class) == 3) {
            startActivity(new Intent(MainActivity.this, admin.class));
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage());
    }
};
uidRef.addListenerForSingleValueEvent(valueEventListener);
现在,您应该在
uid
节点上添加一个侦听器,并检查用户类型,如下所示:

Firebase-root
    |
    --- users
          |
          --- uidOne
          |     |
          |     --- name: "Ed"
          |     |
          |     --- type: 1
          |
          --- uidTwo
          |     |
          |     --- name: "Tyff"
          |     |
          |     --- type: 2
          |
          --- uidOne
                |
                --- name: "Admin"
                |
                --- type: 3
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = rootRef.child("users").child(uid);
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if(dataSnapshot.child("Type").getValue(Long.class) == 1) {
            startActivity(new Intent(MainActivity.this, student.class));
        } else if (dataSnapshot.child("TYPE").getValue(Long.class) == 2) {
            startActivity(new Intent(MainActivity.this, teacher.class));
        } else if (dataSnapshot.child("TYPE").getValue(Long.class) == 3) {
            startActivity(new Intent(MainActivity.this, admin.class));
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage());
    }
};
uidRef.addListenerForSingleValueEvent(valueEventListener);

你有没有尝试过像对待学生和老师那样去做?如果其他条件对学生和老师都很有效。我知道代码还可以,但不知道如何为第三个用户进一步修改它。谢谢你回复Alex。你试过使用switch语句吗?它的具体条件是什么?你能解释一下吗?你解决问题了吗?谢谢你的回答。我很快就会试试。好的,随时通知我。亚历克斯,对不起。由于工作繁忙和一些个人责任,我甚至无法打开我的笔记本电脑。不过,我这个周末完全有空,我计划做的第一件事就是编写您编写的代码。非常感谢。照顾好自己。if处出错(dataSnapshot.child(“TYPE”)==1)。它说“运算符==不能应用于int”。我试着转换成长字符串。然后它说“operator==不能应用于java.lang.string”Alex,Alex,Alex你是个救生员。字面上我对代码做了一些小改动,现在一切都很好。更好的是,现在我可以添加任意数量的用户。谢谢你。谢谢你的光临。非常感谢你的回复。