Android 检查用户是否在登录firebase的特定子级中

Android 检查用户是否在登录firebase的特定子级中,android,firebase,login,Android,Firebase,Login,我正在使用Firebase数据库制作一个android应用程序,我想检查该用户是否未注册为“关联”,因此我正在检查他是否属于子“关联”。 如果用户处于子“Associations”下,则userLogin方法不应登录该用户,否则应登录该用户。 但是,它不起作用,即使用户处于“关联”状态,也会登录 private void userLogin(){ 字符串email=editTextEmail.getText().toString().trim(); 字符串密码=editTextPassword.

我正在使用Firebase数据库制作一个android应用程序,我想检查该用户是否未注册为“关联”,因此我正在检查他是否属于子“关联”。 如果用户处于子“Associations”下,则userLogin方法不应登录该用户,否则应登录该用户。 但是,它不起作用,即使用户处于“关联”状态,也会登录

private void userLogin(){
字符串email=editTextEmail.getText().toString().trim();
字符串密码=editTextPassword.getText().toString().trim();
mAuth.signInWithEmailAndPassword(电子邮件,密码)。addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
progressBar.setVisibility(View.GONE);
if(task.issusccessful()){
FirebaseUser currentUser=FirebaseAuth.getInstance().getCurrentUser();
字符串RegisteredUserID=currentUser.getUid();
DatabaseReference jLoginDatabase=FirebaseDatabase.getInstance().getReference().child(“关联”).child(RegisteredUserID);
jLoginDatabase.addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
if(dataSnapshot.exists()){
Toast.makeText(getApplicationContext(),“您未注册”,Toast.LENGTH\u SHORT.show();
}
其他的
{
完成();
意向意向=新意向(signindor.this,homeportor.class);
intent.addFlags(intent.FLAG\u ACTIVITY\u CLEAR\u TOP);
星触觉(意向);
}
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}});}
否则{
Toast.makeText(getApplicationContext(),task.getException().getMessage(),Toast.LENGTH_SHORT).show();
}
}
});
}

我没有尝试此操作,但它应该可以工作,首先,在您使用用户登录并进入
任务内部后。isSuccessful
,您可以使用
task.getResult().getUser().getUid()
检索当前登录的用户。然后在关联中循环并获取每个用户密钥(我假设关联中的userid是具有特定值的节点),然后比较当前登录的用户是否等于该节点中的一个,如果匹配,它将弹出您的Toast,如果不匹配,您将被重定向

试试这个

public void onComplete(@NonNull Task<AuthResult> task) {
                progressBar.setVisibility(View.GONE);
                if (task.isSuccessful()) {

                    DatabaseReference jLoginDatabase = FirebaseDatabase.getInstance().getReference().child("Associations");

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

                        for(DataSnapshot snapshot : dataSnapshot.getChildren()){

                             if(snapshot.getKey().equals(task.getResult().getUser().getUid()) {
                                Toast.makeText(getApplicationContext(), "You are not registered", Toast.LENGTH_SHORT).show();
                            }
                            else
                            {
                                finish();
                                Intent intent = new Intent(SignInDonor.this, homedonor.class);
                                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                                startActivity(intent);
                            }

                       }
public void onComplete(@NonNull任务){
progressBar.setVisibility(View.GONE);
if(task.issusccessful()){
DatabaseReference jLoginDatabase=FirebaseDatabase.getInstance().getReference().child(“关联”);
jLoginDatabase.addListenerForSingleValueEvent(新的ValueEventListener()){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
对于(DataSnapshot快照:DataSnapshot.getChildren()){
if(snapshot.getKey().equals(task.getResult().getUser().getUid()){
Toast.makeText(getApplicationContext(),“您未注册”,Toast.LENGTH\u SHORT.show();
}
其他的
{
完成();
意向意向=新意向(signindor.this,homeportor.class);
intent.addFlags(intent.FLAG\u ACTIVITY\u CLEAR\u TOP);
星触觉(意向);
}
}
我使用了
addListenerForSingleValueEvent
,因为我们只需要在引用处循环一次,而不需要一直监听数据

public void onComplete(@NonNull Task<AuthResult> task) {
                progressBar.setVisibility(View.GONE);
                if (task.isSuccessful()) {

                    DatabaseReference jLoginDatabase = FirebaseDatabase.getInstance().getReference().child("Associations");

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

                        for(DataSnapshot snapshot : dataSnapshot.getChildren()){

                             if(snapshot.getKey().equals(task.getResult().getUser().getUid()) {
                                Toast.makeText(getApplicationContext(), "You are not registered", Toast.LENGTH_SHORT).show();
                            }
                            else
                            {
                                finish();
                                Intent intent = new Intent(SignInDonor.this, homedonor.class);
                                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                                startActivity(intent);
                            }

                       }