当前位置: 首页 > 知识库问答 >
问题:

添加for循环时,Firebase addListenerForSingleValueEvent将不起作用

李锦
2023-03-14

我想登录两种不同的用户类型。所以我这样编码。但是addListenerForSingleValueEvent中的for循环在此不起作用,请帮助。它好像不会进入for循环。请帮助我在这个登录卡。JAVA

    login.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            performLogin();
        }
    });
}
private String email,password;
private void performLogin() {
    email=emaillog.getText().toString().trim();
    password=passwordlog.getText().toString().trim();
    if(!Patterns.EMAIL_ADDRESS.matcher(email).matches()) {
        Toast.makeText(this, "Invalid Email Address", Toast.LENGTH_SHORT).show();
        return;
    }
    if(TextUtils.isEmpty(password)) {
        Toast.makeText(this, "Password should not be empty", Toast.LENGTH_SHORT).show();
        return;
    }
    progressDialog.setMessage("Logging In....");
    progressDialog.show();
    firebaseAuth.signInWithEmailAndPassword(email,password)
            .addOnSuccessListener(new OnSuccessListener<AuthResult>() {
                @Override
                public void onSuccess(@NonNull AuthResult authResult) {
                    //logged in successfully
                    checkOnline();
                }
            })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    //logging in failed
                    progressDialog.dismiss();
                    Toast.makeText(Login.this, ""+e.getMessage(), Toast.LENGTH_SHORT).show();

                }
            });
}

private void checkOnline() {
    //after loggin in
    progressDialog.setMessage("Checking User....");
    HashMap<String, Object> hashMap = new HashMap<>();
    hashMap.put("online","true");
    //update value to db
    DatabaseReference ref = FirebaseDatabase.getInstance().getReference("Users");
    ref.child(firebaseAuth.getUid()).updateChildren(hashMap)
            .addOnSuccessListener(new OnSuccessListener<Void>() {
                @Override
                public void onSuccess(@NonNull Void unused) {
                    //Update by checking user
                    checkUserType();
                }
            })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    //update unsuccessfully
                    progressDialog.dismiss();
                    Toast.makeText(Login.this, ""+e.getMessage(), Toast.LENGTH_SHORT).show();
                }
            });
}

private void checkUserType() {
    progressDialog.setMessage("Checking UserType....");
    //if the user is seller,then go into seller dashboard
    // if the user is customer, then go into customer dashboard
    DatabaseReference ref = FirebaseDatabase.getInstance().getReference("Users");
    progressDialog.setMessage("Checking UserType1....");
    ref.orderByChild("uid").equalTo(firebaseAuth.getUid())
            .addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot snapshot) {
                    **for (DataSnapshot ds: snapshot.getChildren()){
                        String accounttype =""+ds.child("accounttype").getValue();
                        if(accounttype == "Seller"){
                            startActivity(new Intent(Login.this,SellerDahboard.class));
                        }
                        else{
                            startActivity(new Intent(Login.this,SellerDahboard.class));
                        }
                    }**
                }

                @Override
                public void onCancelled(@NonNull DatabaseError error) {
                }
            });

火基

共有1个答案

盛浩阔
2023-03-14

第一步是忽略潜在的错误,并在取消后实现

至少应该是这样的:

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

或:

public void onCancelled(@NonNull DatabaseError databaseError) { 
    Log.e("Firebase", databaseError.toException());
}

如果这显示了来自数据库的异常,我建议搜索该错误消息,因为它可能已经被覆盖过了。

 类似资料:
  • 我有一个JPanel、窗口和一组JPanel和JLabel。我想在JFrame中添加5个JPanel,在每个JPanel中添加一个JLabel。每个JPanel将用于表示有关骰子的数据。 但是,当我运行代码时,只有最后一个JPanel出现在JFrame上,并带有文本“Dice 4”。我不明白为什么。 守则:

  • 问题内容: 这有效: 但是,这不是: 在第二个示例中,数组未添加到自身。 问题答案: 是的,不是 您所做的可能也是有效的代码,但是现在您正在做 它适用于数字类型(我假设您有)。没有数组索引的简化示例: 样品: 输出: -5 -5 5 5 为了清晰起见,从评论中复制: 您基本上是在说。在这种情况下,仅需指示它是一个正整数即可。这是有效的代码,但这不是您想要的。

  • 问题内容: 在这段代码中,为什么不按我的意愿初始化我的数组?是不是for-each循环并非旨在做到这一点,或者我只是没有正确使用它? 问题答案: for-each循环不适用于这种情况。您不能使用for-each循环来初始化数组。您的代码: 将转换为以下内容: 如果这是一个对象数组,它仍然会失败。基本上,for-each依次将集合或数组中的每个条目分配给您提供的变量,然后可以使用该变量。该变量 不

  • 我试图理解数组加法CoderByte问题的解决方案中的逻辑。这是问题提示——“使用JavaScript语言,让函数ArrayAdditionI(arr)获取存储在arr中的数字数组并返回字符串true,如果数组中的任何数字组合可以加到等于数组中的最大数字,否则返回字符串false。例如:如果arr包含[4, 6, 23, 10, 1, 3],则输出应该返回true,因为4 6 10 3 = 23。

  • 我在mysql数据库中有一个数组数据,我想在使用Ajax得到结果后,用for循环逐个显示出来。过程是这样的。 这是将呈现每个项的段落 null 当我尝试使用for循环时,它会说语法错误,意外的for循环被取走,我该如何解决这个问题,例如,这里我使用sample for循环来使事情尽可能简单。

  • 问题内容: 我也在学习Java和android。我们可以在while循环中执行的几乎所有事情都可以在while循环中执行。 我发现一个简单的条件,使用while循环比for循环更好 如果我必须在程序中使用counter的值,那么我认为while循环要比for循环好 使用while循环 在这种情况下,我发现while循环要比for循环好,因为如果要在for循环中实现相同的效果,则必须将counter