Android 如何将值与Firebase实时数据库的子级进行比较?

Android 如何将值与Firebase实时数据库的子级进行比较?,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我想将一个值与Firebase实时数据库的子项进行比较,但我不知道如何做。我的数据库的结构是: 这是我写的代码: email = loadPreferences(); mAuth = FirebaseAuth.getInstance(); FirebaseDatabase database = FirebaseDatabase.getInstance(); final DatabaseReference myRef = database.getReference().chil

我想将一个值与Firebase实时数据库的子项进行比较,但我不知道如何做。我的数据库的结构是:

这是我写的代码:

email = loadPreferences();
mAuth = FirebaseAuth.getInstance();

FirebaseDatabase database = FirebaseDatabase.getInstance();
        final DatabaseReference myRef = database.getReference().child("users");
        myRef.orderByChild("email").equalTo(email).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                if(snapshot.getValue() != null) {
                    //loop through the keys
                    for(DataSnapshot datasnap : snapshot.getChildren()) {

                        if(!email.equalsIgnoreCase("")) {
                            myRef.child("users").child("email").child("address").setValue(getAddress());
                        }
                    }
                }
            }

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

我尝试使用调试器,但当调试器到达“orderByChild()”时,它会跳过所有内容并跳到末尾。有人能帮我吗?提前感谢

数据是从Firebase异步加载的,因为它需要从云端加载。Firebase不会为用户阻止应用程序,而是在后台加载数据,并让主代码继续运行,这就是您在逐步完成代码时看到的情况

不要单步执行代码,而是在
onDataChange
内的第一行上放置一个断点,然后让代码运行。然后,当数据可用时,调试器将命中断点,您可以继续调试

您还应该实现
onCancelled
,因为您现在忽略了可能的问题。该方法至少应为:

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

非常感谢您,现在我看到调试器并没有跳过指令,我按照您的建议添加了onCancelled实现。如果我的用户模型没有像address这样的属性,那么我添加它会更好,还是可以像我发布的那样直接添加呢?我在上面的回答中试图解决您的问题中最具体(也是最常见)的问题。如果我的答案有用,请单击向上投票按钮(▲) 如果它回答了您的问题,请单击复选标记(✓) 接受它。这样别人就知道你已经得到了(足够的)帮助。另外,如果你还有更多问题,我建议你为此打开一个新的帖子。是的,我刚刚做了,再次非常感谢。