用户登录可以识别用户位置

时间:2017-09-11 10:08:21

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

用户在注册期间注册为学生或导师,保存在firebase数据库中,但是当登录无法识别保存在firebase数据库中的用户位置时,我该怎么办?请任何人都可以提出建议或建议我如何做到这一点。

数据库将uid从电子邮件身份验证中保存为根目录下的节点,然后其余详细信息是uid的子节点。

enter image description here

像这样的代码

 private FirebaseAuth auth;
private EditText un, pw;
private String getun, getpw, uid;
private Button bl;
private FirebaseDatabase db;
private DatabaseReference ref;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    auth = FirebaseAuth.getInstance();
    db = FirebaseDatabase.getInstance();
    ref = db.getReference();
    uid = auth.getCurrentUser().getUid();
    ref = db.getReference("users").child(uid);

    un = (EditText) findViewById(R.id.Lun);
    pw = (EditText) findViewById(R.id.Lpw);

    bl = (Button) findViewById(R.id.Lbt);

    final TextView rl = (TextView) findViewById(R.id.Lreg);

    //login
    bl.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            getun = un.getText().toString().trim();
            getpw = pw.getText().toString().trim();
            loginaction(getun, getpw);
        }
    });

    //open register page
    rl.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent ri = new Intent(Login.this,Register.class);
            Login.this.startActivity(ri);
        }
    });
}


private void loginaction(String a, String b){

    auth.signInWithEmailAndPassword(a, b).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
            Log.d("Login", "Login Success" + task.isSuccessful());

            if (!task.isSuccessful()) {
                Log.w("Login", "Login Failed", task.getException());
                Toast.makeText(Login.this, "Login Failed. Please try again", Toast.LENGTH_SHORT).show();

            }else{

                Toast.makeText(Login.this, "Login Success", Toast.LENGTH_SHORT).show();

                ref.orderByChild("position").addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {

                            String ps  = dataSnapshot.getValue().toString();

                            if(ps.equalsIgnoreCase("student")){

                                Intent i = new Intent(Login.this, StudentHomePage.class);
                                startActivity(i);

                            }else if (ps.equalsIgnoreCase("tutor")){

                                Intent i = new Intent(Login.this, TutorHomePage.class);
                                startActivity(i);

                            }else{

                                Toast.makeText(Login.this,
                                        "Wrong input. Please check again the email and password.", Toast.LENGTH_SHORT).show();
                                return;
                            }
                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }
                });

            }

            // ...
        }
    });

}

1 个答案:

答案 0 :(得分:0)

从用户创建两个子节点。一个用于学生,一个用于导师。(给两个孩子的值都为真,否则firebase不会拯救孩子。)

Firebase tree Structure

有两个注册按钮..一个用于学生,一个用于导师。注册导师代码.....

mRegistration.setOnClickListener(new 
  View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final String email = mEmail.getText().toString();
            final String password = mPassword.getText().toString();
            mAuth.createUserWithEmailAndPassword(email,password).addOnCompleteListener(DriverLoginActivity.this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (!task.isSuccessful()){
                        Toast.makeText(TutorsLoginActivity.this, "Sign in error", Toast.LENGTH_SHORT).show();
                    }else{
                        String user_id= mAuth.getCurrentUser().getUid();
                        DatabaseReference current_user_db= FirebaseDatabase.getInstance().getReference().child("Users").child("Tutors").child(user_id);
                        current_user_db.setValue(true);

                    }

                }
            });

        }

    });

为学生做同样的事。只需将.child("Tutors")更改为.child("Students")这将为您提供两个不同组的UID。登录时也可以这样做。我认为这是一种更好的方法。