根据用户类型定向到每个活动

时间:2019-07-08 07:15:54

标签: java android firebase firebase-authentication

我创建了一个项目,该项目具有两种类型的用户(患者和医生)。登录期间,我需要在用户表下的firebase中检索role属性。 在我的数据库结构中,用户类型可能是“医生”或“患者”。登录期间,我想我需要检索角色信息,然后将其分配给android studio中的其他活动。但是,我的代码似乎不起作用。该应用程序保持停止。有没有人可以帮助我。预先感谢。

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);

        email = findViewById(R.id.email);
        psd = findViewById(R.id.psd);

    }

    public void clicked(View v) {
        switch (v.getId()) {
            case R.id.login:
                LoginUser();
                break;
            case R.id.register:
     Intent intent = new Intent(this, ChooseRole.class);
                startActivity(intent);
                break;
        }
    }

    public void LoginUser() {
        String email1 = email.getText().toString().trim();
        String psd1 = psd.getText().toString().trim();

        mAuth.signInWithEmailAndPassword(email1, psd1)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()) {
                            indentify();
                            finish();

                        } else {
                            Toast.makeText(Login.this, "couldn't login",
                                    Toast.LENGTH_SHORT).show();
                        }
                    }
                });
    }

    public void indentify() {
        String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
        FirebaseDatabase.getInstance().getReference(uid).addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                long points = dataSnapshot.child("role").getValue(Long.class);
                String role = String.valueOf(points);
                if(role=="patient"){
                    Intent intent = new Intent(Login.this, HomePage.class);
                    startActivity(intent);
                }
                else{
                    Intent intent = new Intent(Login.this, HomePage2.class);
                    startActivity(intent);
                }
            }

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

    }
}

大家好,我是这样更改的,它成功了。谢谢大家的帮助:D

 public void LoginUser(){
        String email1 = email.getText().toString().trim();
        String psd1 = psd.getText().toString().trim();

        mAuth.signInWithEmailAndPassword(email1, psd1)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()){
                            currentUser = mAuth.getCurrentUser();


                            String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
                            FirebaseDatabase.getInstance().getReference("users").child(uid).addListenerForSingleValueEvent(new ValueEventListener() {

                                @Override
                                public void onDataChange(DataSnapshot dataSnapshot) {
                                    if(dataSnapshot.child("role").getValue(String.class).equals("patient")) {
                                        startActivity(new Intent(Login.this, HomePage.class));
                                        return;
                                    }
                                    if (dataSnapshot.child("role").getValue(String.class).equals("doctor")) {
                                        startActivity(new Intent(Login.this, HomePage2.class));
                                        return;
                                    }
                                }

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

                        }else {
                            Toast.makeText(Login.this, "couldn't login",
                                    Toast.LENGTH_SHORT).show();
                        }
                    }
                });
    }

1 个答案:

答案 0 :(得分:0)

因为在数据库中,您有一个名为users的节点,然后添加对该节点的引用,例如:

 FirebaseDatabase.getInstance().getReference("users").child(uid).addListenerForSingleValueEvent(new ValueEventListener() {
  @Override
public void onDataChange(DataSnapshot dataSnapshot) {

然后执行以下操作:

更改此:

if(role=="patient"){

对此:

if(role.equals("patient")){

要比较每个对象的值,需要使用equals()