Java 返回错误结果的Firebase数据库查询
我有一个Android Studio应用程序,可以根据用户登录凭据(电子邮件)查询用户并提取用户信息。因此,我将电子邮件从一个活动(登录)传递到另一个活动(配置文件)。在ProfileActivity中,我查询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
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);