【问题标题】:Direct to each activity according to type of user [duplicate]根据用户类型直接到每个活动[重复]
【发布时间】:2019-07-08 07:15:54
【问题描述】:

我创建了一个项目,它有两种类型的用户(患者和医生)。在登录期间,我需要在 users 表下的 firebase 中检索角色属性。 在我的数据库结构中,用户类型可能是“医生”或“病人”。在登录期间,我想我需要检索角色信息,然后将它们分配给 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();
                        }
                    }
                });
    }

【问题讨论】:

  • 你能展示一下logcat吗?
  • 感谢您的回复。 logcat里面什么都没有
  • 在 logcat 中检查了 firebase 选项?如果应用程序停止,它应该显示日志
  • @KimE.R 请提供 Logcat 以提供帮助。如果应用程序崩溃,则应跟踪错误。
  • 已经签入到 firebase 和错误,但它没有显示任何内容。实际上,我应该登录然后只检索用户类型还是其他方式?

标签: java android firebase firebase-authentication


【解决方案1】:

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

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

然后执行以下操作:

改变这个:

if(role=="patient"){

进入这个:

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

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

【讨论】:

  • 谢谢你的回复,结果好像是一样的:(
  • 请添加数据库图片
  • 尝试使用 role.equalsIgnorecase("patient")
  • @KimE.R 检查我的编辑
  • 嗨,该应用程序也一直在停止。我应该使用firebase身份验证登录方法然后调用获得onDataChange方法的方法吗?或者实际上是其他方法的问题?
猜你喜欢
  • 2019-07-09
  • 2014-03-02
  • 2018-09-14
  • 2020-04-19
  • 1970-01-01
  • 2015-07-09
  • 2017-10-24
  • 2014-12-30
  • 2010-12-25
相关资源
最近更新 更多