Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.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,我有一个Android Studio应用程序,可以根据用户登录凭据(电子邮件)查询用户并提取用户信息。因此,我将电子邮件从一个活动(登录)传递到另一个活动(配置文件)。在ProfileActivity中,我查询Firebase数据库,并使用用户电子邮件地址获取特定的用户信息,例如:全名、职业、地址等。。这是我的数据库的结构: user-registration-app users -Lu8jvjlDWKbgK1ibeku email: johndoe@gmai

我有一个Android Studio应用程序,可以根据用户登录凭据(电子邮件)查询用户并提取用户信息。因此,我将电子邮件从一个活动(登录)传递到另一个活动(配置文件)。在ProfileActivity中,我查询Firebase数据库,并使用用户电子邮件地址获取特定的用户信息,例如:全名、职业、地址等。。这是我的数据库的结构:

user-registration-app
   users
      -Lu8jvjlDWKbgK1ibeku
         email: johndoe@gmail.com
         fullname: John Doe
         address: 1234 nw thistreet
         profession: developer
 -Lu8jvjlDWKbgK1ibeku
         email: janed@gmail.com
         fullname: Jane d
         address: 3444 nw thistreet
         profession: diver
所以在profile活动中,我创建了一个对“用户”的引用,然后在电子邮件相等的地方创建了一个
orderbychild()johndoe@gmail.com,但正在返回一些奇怪的地址(内存地址)

在访问orderByChild(“电子邮件”)之前,我是否需要访问密钥id?谢谢你的帮助

但是正在返回一些奇怪的地址(内存地址)

这是预期的行为,因为您正在尝试记录Firebase查询对象的字符串表示形式

userRef.orderByChild("email").equalTo(email)
返回类型为的对象

如果要获取与该查询对应的值,应将该查询保存到变量并使用侦听器,如以下代码行所示:

Query query = userRef.orderByChild("email").equalTo(email);
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String email = ds.child("email").getValue(String.class);
            Log.d(TAG, email);
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
    }
};
query.addListenerForSingleValueEvent(valueEventListener);

如果电子邮件是唯一的。。。我还需要循环遍历数据集吗?如果我知道返回单个数据,是否有更简单的方法是的,
dataSnapshot
对象包含一个用户对象列表。即使只有一个结果,
dataSnapshot
也将包含一个结果列表。不,没有。这是最简单的一个。
Query query = userRef.orderByChild("email").equalTo(email);
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String email = ds.child("email").getValue(String.class);
            Log.d(TAG, email);
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
    }
};
query.addListenerForSingleValueEvent(valueEventListener);