首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果( login.getType() .equals("Admin") && login.getType() != null)

如果( login.getType() .equals("Admin") && login.getType() != null)
EN

Stack Overflow用户
提问于 2019-10-21 01:37:30
回答 1查看 30关注 0票数 0

这是JSON文本

代码语言:javascript
复制
{
  "User" : {
    "E10W6iRbAUOa5XbFnedUuepswsw2" : {
      "email" : "jay@gmail,com",
      "type" : "Admin"
    },
    "Od6G6kbPHrScLVYrqmovaFP0gw03" : {
      "email" : "gloria@yahoo,com",
      "type" : "User"
    },
    "jCiHZCIThdQi1LhVSonN6UNxRok2" : {
      "email" : "clara@yahoo,com",
      "type" : "User"
    }
  }
}

if (login.getType().equals("Admin") && login.getType() != null)上或如果有任何其他错误,请让我知道

代码语言:javascript
复制
public class SignInActivity extends AppCompatActivity {

    private EditText memail;
    private EditText mpassword;
    private Button mlogin;
    private Button mregister;
    private ProgressBar mpgbar;
    private FirebaseAuth mAuth;
    FirebaseDatabase database;
    DatabaseReference users;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sign_in);
        database = FirebaseDatabase.getInstance();
        users = database.getReference("User");
        mAuth = FirebaseAuth.getInstance();
        memail = findViewById(R.id.emailtv);
        mpassword = findViewById(R.id.passwordtv);
        mlogin = findViewById(R.id.loginBtn);
        mregister = findViewById(R.id.regBtn);
        mpgbar = findViewById(R.id.progressBar);

        mregister.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(SignInActivity.this, RegisterActivity.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intent);
                finish();
                return;
            }
        });

        mlogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                LoginUser(memail.getText().toString(), mpassword.getText().toString());
            }
        });

    }

    private void inProgress(boolean x) {
        if (x) {
            mpgbar.setVisibility(View.VISIBLE);
            mlogin.setEnabled(false);
            mregister.setEnabled(false);
        } else {
            mpgbar.setVisibility(View.GONE);
            mlogin.setEnabled(true);
            mregister.setEnabled(true);
        }
    }

    private boolean isEmpty() {
        if (TextUtils.isEmpty(memail.getText().toString())) {
            memail.setError("REQUIRED");
            return true;
        }
        if (TextUtils.isEmpty(mpassword.getText().toString())) {
            mpassword.setError("REQUIRED");
            return true;
        }
        return false;
    }

    private void LoginUser(final String email, final String pwd) {

        if (isEmpty()) return;
        inProgress(true);
        users.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if (!email.isEmpty()) {
                    User login = dataSnapshot.child(email).getValue(User.class);
                    if (login.getType().equals("Admin") && login.getType() != null) {
                        mAuth.signInWithEmailAndPassword(email.replace(",","."), pwd)
                                .addOnSuccessListener(new OnSuccessListener<AuthResult>() {
                                    @Override
                                    public void onSuccess(AuthResult authResult) {
                                        Toast.makeText(SignInActivity.this, "User signed in", Toast.LENGTH_LONG).show();
                                        Intent intent = new Intent(SignInActivity.this, AdminPage.class);
                                        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                                        startActivity(intent);
                                        finish();
                                        return;
                                    }
                                }).addOnFailureListener(new OnFailureListener() {
                            @Override
                            public void onFailure(@NonNull Exception e) {
                                Toast.makeText(SignInActivity.this, "Sign in failed" + e.getMessage(), Toast.LENGTH_LONG).show();
                            }
                        });
                    } else if (login.getType().equals("User")  && login.getType() != null) {
                        if (isEmpty()) return;
                        inProgress(true);
                        mAuth.signInWithEmailAndPassword(email.replace(",","."), pwd)
                                .addOnSuccessListener(new OnSuccessListener<AuthResult>() {
                                    @Override
                                    public void onSuccess(AuthResult authResult) {
                                        Toast.makeText(SignInActivity.this, "User signed in", Toast.LENGTH_LONG).show();
                                        Intent intent = new Intent(SignInActivity.this, Home.class);
                                        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                                        startActivity(intent);
                                        finish();
                                        return;
                                    }
                                }).addOnFailureListener(new OnFailureListener() {
                            @Override
                            public void onFailure(@NonNull Exception e) {
                                Toast.makeText(SignInActivity.this, "Sign in failed" + e.getMessage(), Toast.LENGTH_LONG).show();
                            }
                        });
                    }
                    else
                        {
                            Toast.makeText(SignInActivity.this, "Sign in failed" , Toast.LENGTH_LONG).show();
                        }

                }
            }

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

            }
        });


    }
}

它应该将用户重定向到主页,并将管理员重定向到管理页面。但它总是会崩溃。

EN

回答 1

Stack Overflow用户

发布于 2019-10-21 07:18:18

您正在加载整个/User节点,然后尝试从其中读取单个User.class。这是行不通的,因为/User包含多个用户。但您还需要首先查询/User下的子项,使其仅读取具有您要查找的电子邮件地址的用户。

如下所示:

代码语言:javascript
复制
private void LoginUser(final String email, final String pwd) {
    Query query = users.orderByChild("email").equalTo(email)
    query.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot userSnapshot: dataSnapshot.getChildren()) {
                User login = userSnapshot.getValue(User.class);
                    ...
                }
            }
        }
    });
}

主要区别:

此操作不是加载所有用户,而是在/User下的子节点中查询与email address.

  • Inside匹配的子节点。可能有多个匹配的子节点,因此我们循环遍历那些results.

  • Removed child("email")onDataChange中的子节点,因为如果您尝试读取整个User对象,这将不起作用。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58475564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档