FirebaseDatabase显示单个用户的单个值

时间:2017-10-19 22:29:00

标签: java android firebase mobile firebase-realtime-database

目前在Android Studio上处理一个小项目,无法确定如何从当前用户打印单个值。 我想要打印当前用户的用户名,而不打印所有用户的其他信息,如电子邮件地址......

这是我的数据库

enter image description here

我知道我有一切都是重复的,我已经解决了这个问题:P

到目前为止,我已经成功打印了所有用户的详细信息(不幸的是每个用户的详细信息也已打印出来)......使用此代码:

fDatabase = FirebaseDatabase.getInstance().getReference().child("Users");

    fDatabase.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            String test = (String) dataSnapshot.getValue().toString();
            Log.d ("Testing", test);

enter image description here 我实现的输出可以在上面找到。

这是我的用户类:

class User {
String Displayname;
String Email;
Long createdAt;

public User () {}

public User(String displayname, String email, Long createdAt) {
    this.Displayname = displayname;
    this.Email = email;
    this.createdAt = createdAt;
}

public String getDisplaynames() {
    return Displayname;
}

public String getEmails() {
    return Email;
}

public Long getCreatedAts() {
    return createdAt;
}

我的问题是如何才能将输出打印出来:测试:Chrisharvz

我想这样做的原因是我可以在登录我的应用程序时显示用户的用户名,用Textview.settext等替换Log.d ...

有人有想法吗? 如果您需要更多信息,请知道! :d 谢谢!

2 个答案:

答案 0 :(得分:0)

我建议在从firebase检索数据后将数据转换回用户对象,因为现在您正在使用整个对象。你应该试试这个:

    fDatabase =FirebaseDatabase.getInstance().getReference().child("Users");

    fDatabase.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            // convert the data back to the model
            User user = (User) dataSnapshot.child(currentUser.getUid()).getValue(User.class);
            // just get the string value for the username
            String displayName = user.getDisplayName() // getter method from your model
            Log.d ("Testing", displayName);
            }

希望这有助于解决您的问题。

答案 1 :(得分:0)

假设Users节点是Firebase数据库根目录的直接子节点而0x2s4Ft...是登录用户的uid,则仅从{{1}获取值}字段,请使用以下代码:

Displayname

您的输出将是:

FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
String uid = firebaseUser.getUid();

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = rootRef.child("Users").child(uid);
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        String Displayname = dataSnapshot.child("Displayname").getValue(String.class);
        Log.d("Testing: ", Displayname);
    }

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