我有一个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
因此,在个人资料活动中,我先创建对“用户”的引用,然后创建orderbychild()
,其中电子邮件等于johndoe@gmail.com,但返回一些奇怪的地址(内存地址)。
Intent intent = getIntent();
String email = intent.getStringExtra("email");
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference userRef = rootRef.child(USERS);
Log.v("EMAILADD", String.valueOf(userRef.orderByChild("email").equalTo(email)));
在访问orderByChild(“ email”)之前是否需要访问密钥ID?任何帮助表示赞赏。
答案 0 :(得分:1)
但是返回了一些奇怪的地址(内存地址)
这是预期的行为,因为您正尝试记录Firebase查询对象的String表示形式。
userRef.orderByChild("email").equalTo(email)
返回类型为Firebase real-time database Query的对象。
如果要获取与该查询相对应的值,则应将该查询保存到变量中并使用侦听器,如以下代码行所示:
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);