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

2023-12-14

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

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");
            }


        }
    };

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

Firebase-root
    |
    --- users
          |
          --- uidOne
          |     |
          |     --- name: "Ed"
          |     |
          |     --- type: 1
          |
          --- uidTwo
          |     |
          |     --- name: "Tyff"
          |     |
          |     --- type: 2
          |
          --- uidOne
                |
                --- name: "Admin"
                |
                --- type: 3

现在您应该添加一个侦听器uid节点并检查用户的类型,如下所示:

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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将多种类型的用户重定向到各自的 Activity? 的相关文章

随机推荐

  • Scanner 类跳过空白

    我正在使用嵌套Scanner循环从字符串行 来自文本文件 中提取数字 如下所示 String str testString Scanner scanner new Scanner str while scanner hasNext Stri
  • java中方法的最大大小?

    我了解到java中一个方法的最大大小是64k 如果超过 我们将收到编译器警告 例如 代码太大而无法编译 那么我们可以说这是java内存量这么小的一个缺点吗 我们可以增加这个大小限制吗 或者真的有可能增加吗 关于这个方法的大小还有更多的想法吗
  • 在 Powershell 中获取给定日期的 ISO 8601 一年中的第几周

    在搜索如何获取时ISO 8601 一年中的一周在 PowerShell 中 我偶然发现这个问题是针对 C 的 尽量不要用 PowerShell 代码来解决这个问题 下面是我的 Powershell 端口 基于用户6887101 的回答 我会
  • 如何隐藏 Google 地图 iOS SDK 上的默认标签

    我在用GoogleMapSDK v1 8在我最新的 iOS 应用程序上 是否可以显示法线贴图 kGMSTypeNormal 没有任何默认标签 例如 隐藏以下部分或全部内容 城市标签 道路标签 公共交通图标等 我希望有办法做到这一点 请指导我
  • 使用 maven-remote-resources-plugin 并指定 resourcesDirectory

    我试图在使用时覆盖默认资源目录 src main resources maven 远程 资源 插件 然而 下面示例中的指定值似乎没有被考虑在内 如果有人能给我一些指示 我将不胜感激
  • 套接字线程和 PyGTK

    我正在尝试编写一个即时消息程序 基本的用户界面即将完成 我正在研究消息的接收部分 我有一个 UI 类和一个线程 Receive Socket 类 每次 Received Socket 类的套接字接收到消息时 它都会执行 gobject id
  • C++ 递归类型定义是否可行,特别是我可以在 T 的定义中放置一个向量 吗?

    对于我的一个项目 我真正想做的是这个 将其简化到最低限度 struct Move int src int dst struct MoveTree Move move std vector
  • 获取YAML路径下的所有节点

    我有一个如下所示的 YAML 文件 Main topofhouse x 276 4375 y 71 0 z 60 5 yaw 290 7768 pitch 35 400017 2ndfloor x 276 5 y 67 0 z 60 5 y
  • typescript:错误 TS2693:“Promise”仅指类型,但在此处用作值

    我正在尝试对我的 AWS Lambda 使用 Typescript 但在使用 Promise 的地方都会收到以下错误 error TS2693 Promise only refers to a type but is being used
  • 从非 UI 线程更新 ObservableCollection

    我正在开发 Windows 8 应用商店应用程序 我有一个计时器 每两分钟调用一次委托并发出异步网络请求 生成的数据将添加到绑定到 UI 元素的 observablecollection 中 这样做会引发异常 因为正在非 UI 线程上修改
  • Flexbox、CSSGrid 的奇怪行为

    我有这样的情况 https jsfiddle net johnsam rdtva2fq On Chrome效果很好 请看这个 它开始 参见 FIRST 和 LAST btn 好的 On Safari它没有 对于 iPad iPhone 也是
  • 如何检查 Java 8 Stream 是否为空?

    我如何检查是否Stream为空 如果不是 作为非终端操作抛出异常 基本上 我正在寻找与下面的代码等效的内容 但没有具体化中间的流 特别是 在终端操作实际消耗流之前不应进行检查 public Stream
  • 将特定的类/ID 应用到菜单上的当前页面 (PHP)

    我有一个这样的菜单 div a href http domain com folder biography img src blahblahblahblah a a href http domain com folder contacts
  • 向 QML 项目添加资源会导致编译速度非常慢

    我在项目的资源文件中添加了一些图标 突然间 QML 代码的每一个微小更改都会导致项目运行前需要 7 8 秒的等待时间 几乎感觉像是在重新编译 C 代码 但实际上这是 qrc 文件 编译 造成的延迟 我尝试禁用 qrc 压缩 希望它会变得更快
  • 为什么我的图像没有被附加到数组中?

    我有一个简单的模型 其中包括 var photos UIImage 我已将 zombies jpg 文件作为文件复制到项目中 然后 在表视图控制器中所需的 init 中 我想加载一条虚拟记录 我可以定义所有 String 和 NSDate
  • 多处理池和生成器

    首先看下面的代码 pool multiprocessing Pool processes N batch for item in generator batch append item if len batch 10 pool apply
  • 用于 SEO 的“h1”中的“p”标签[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 会使用 p 嵌套在 a 中的标签 p h1 标签对 SEO 不利吗 h1 p Some title p p Some subtitle p h1 这将使我的生活变得更轻松 处理动态页
  • 如何在 React Native 中运行后台任务?

    我已经建立了一个iOS 小应用程序在 React Native 中进行位置跟踪 定期将纬度 经度发送到用户选择的服务器 然而 这仅在应用程序位于前台时才有效 当用户在其他应用程序中时 如何在后台运行此任务 不幸的是 目前不支持任何类型的后台
  • 日期与日期时间

    我正在开发一个需要返回事件日期的程序 我正在寻找一个Date not a DateTime 是否有一种只返回日期的数据类型 不 没有 DateTime表示由日期和时间组成的某个时间点 但是 您可以通过以下方式检索日期部分Date财产 这是另
  • 如何将多种类型的用户重定向到各自的 Activity?

    我正在 Firebase 上创建一个投票应用程序 我有 3 种类型的用户 到目前为止 我可以在两种用户 学生 教师 使用以下代码登录后成功将他们重定向到各自的活动 到目前为止我的用户但现在我必须添加另一个用户 ADMIN 并且像其他用户一样