【问题标题】:Retrieving Specific Data from Firebase Realtime Database从 Firebase 实时数据库中检索特定数据
【发布时间】:2019-02-04 23:23:48
【问题描述】:

请帮助我想从 Firebase 实时数据库中检索特定数据我有 2 个用户教授和学生,我想使用该数据进行验证。

FireBase Realtime Database

 firebaseAuth.signInWithEmailAndPassword(email,pass).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                progressDialog.dismiss();
                if(task.isSuccessful()){

                    //The task is successful || Task Login
                    Toast.makeText(getApplicationContext(),"Successfully Login",Toast.LENGTH_LONG).show();

                        // If the users is professor but if it is student go to userStudent.class
                        finish();
                        startActivity(new Intent(getApplicationContext(),userProf.class));

FireBase Realtime Database

【问题讨论】:

  • 请访问官方文档了解FIrebase firebase.google.com/docs/database/admin/retrieve-data
  • 我正在 Firebase 中构建一个基于角色的应用程序,我只需要获取特定数据即可打开新意图。
  • 你检查过页面吗?它有你想要的一切
  • 是的,我已经检查过了,如果用户是教授,它似乎可以打印出我在登录活动中的验证数据,它必须使用 prof Profile-r 活动,反之亦然学生
  • 嘿,你为什么不接受答案?它不会再次解决您的问题吗?取而代之的是,您可以提供您面临的问题,并且它将得到改进。我为此投入了大量时间,如果您继续为社区这样做是不合适的。

标签: java android firebase firebase-realtime-database


【解决方案1】:

这就是你要找的东西

FirebaseUser user=FirebaseAuth.getInstance().getCurrentUser(); 
DatabaseReference reference;
firebaseAuth.signInWithEmailAndPassword(email,pass).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    progressDialog.dismiss();
                    if(task.isSuccessful()){

                        //The task is successful || Task Login
                       Toast.makeText(getApplicationContext(),"Successfully Login",Toast.LENGTH_LONG).show(); 
                       reference = FirebaseDatabase.getInstance().
                       getReference("dbname").child(user.getUid());


                       reference.addListenerForSingleValueEvent(new ValueEventListener() {
                       @Override
                       public void onDataChange(DataSnapshot dataSnapshot) {
                       for(DataSnapshot datas: dataSnapshot.getChildren()){
                       String usertype=datas.child("user").getValue().toString();

                       // If the users is professor but if it is 
                            // student go to userStudent.class
                       if(usertype.equals("Student")){

                         startActivity(new      
                         Intent(getApplicationContext(),studentProfile.class));
                         finish();

                       }else if (usertype.equals("Professor")) {
                         startActivity(new      
                         Intent(getApplicationContext(),professorProfile.class));
                         finish();
                       }

                      }
                    }

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






    }

【讨论】:

  • 您好,感谢您的帮助。我的目标是获取特定角色的特定数据,例如用户已经注册为教授或学生,然后作为用户登录到应用程序。如果用户是教授,则转到与学生相同的professor_profile_activity 如果用户是学生,则转到student_profile_activity。我是stackoverflow的新手,请帮忙,非常感谢:)
  • 你可以使用他们的用户名
  • 你在不同的表中是什么意思?那么如何使用他们的userid呢? :)
  • 您要做的是检查当前用户是教授还是学生,对吧?如果是这样,上面的代码不适用于解决方案。您将需要数据快照来检查用户是学生还是教授
  • 是的,我该如何检查呢?
【解决方案2】:

试试这个代码

firebaseAuth.signInWithEmailAndPassword(email,pass).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
            progressDialog.dismiss();

            if(task.isSuccessful()){

                //The task is successful || Task Login
                Toast.makeText(getApplicationContext(),"Successfully Login",Toast.LENGTH_LONG).show();

                 //user UID
                String userId = task.getResult().getUser().getUid();
                DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child(userId);

                ref.addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                        String user = dataSnapshot.child("user").getValue(String.class);

                        if (user.equals("Student")) {

                         startActivity(new Intent(getApplicationContext(),userStudent.class));

                        } else if(user.equals("Professor")) {
                          startActivity(new Intent(getApplicationContext(),userProf.class));
                        }
                        finish();      

                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError databaseError) {

                    }
               });

}

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2020-07-15
    • 2021-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    • 2020-12-09
    • 1970-01-01
    相关资源
    最近更新 更多