Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何让用户结构只知道他的电子邮件Firebase实时_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Java 如何让用户结构只知道他的电子邮件Firebase实时

Java 如何让用户结构只知道他的电子邮件Firebase实时,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我有一个实时数据库,其中包含一个子“用户”。这个孩子有不同的用户。 每个用户都有一组如下属性:用户(电子邮件、姓名、年龄、电话号码、性别) 我使用push函数将它们分离,并生成一个唯一的ID: 所以我的问题是:我想知道一个特定用户的所有属性,我只有他的电子邮件地址 我尝试过这个查询,但我不知道它到底是如何工作的 reference.orderByChild("email").equalTo(email 您可以尝试以下方法:- DatabaseReference databaseRef

我有一个实时数据库,其中包含一个子“用户”。这个孩子有不同的用户。 每个用户都有一组如下属性:用户(电子邮件、姓名、年龄、电话号码、性别)

我使用push函数将它们分离,并生成一个唯一的ID:

所以我的问题是:我想知道一个特定用户的所有属性,我只有他的电子邮件地址

我尝试过这个查询,但我不知道它到底是如何工作的

    reference.orderByChild("email").equalTo(email
您可以尝试以下方法:-

DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference().child("User");
databaseReference.orderByChild("email").equalTo(email).addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            String email = dataSnapshot.child("email").getValue(String.class);
            String age = dataSnapshot.child("age").getValue(String.class);
            String fullName = dataSnapshot.child("fullName").getValue(String.class);
            String gender = dataSnapshot.child("gender").getValue(String.class);
            String phone_number = dataSnapshot.child("phone_number").getValue(String.class);
    }

    @Override
    public void onChildChanged(DataSnapshot dataSnapshot, String s) {

    }

    @Override
    public void onChildRemoved(DataSnapshot dataSnapshot) {

    }

    @Override
    public void onChildMoved(DataSnapshot dataSnapshot, String s) {

    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.d("TAG", "error is " + databaseError.getMessage());
    }
});
请通过此链接了解有关从Firebase检索数据的更多信息


要显示该数据,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
Query query = rootRef.child("users").orderByChild("email").equalTo(email);
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String name = ds.child("name").getValue(String.class);
            String age = ds.child("age").getValue(String.class);
            //and so on
            Log.d("TAG", name + " / " + age);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
query.addListenerForSingleValueEvent(eventListener);

这是一个在logcat中显示
名称
年龄
的示例。同样,您也可以获得其他值。

假设
reference
是指向您的用户节点的数据库引用,此查询应该可以正常工作。您得到的结果是什么?不需要在客户端中的所有子节点上循环以找到具有匹配电子邮件地址的子节点(并且对用户的带宽造成了难以置信的浪费)
databaseReference.orderByChild(“email”).equalTo(email).addChildEventListener
会解决这个问题。@FrankvanPuffelen哦,没有考虑性能,谢谢你指出:)