2017-04-05 84 views
3

我使用Firebase数据库和Java在Android上创建了一个聊天应用程序。无论用户何时首次注册,都会将其用户名存储到节点“user”,UserID,“profile”,“username”下的数据库中。用户名使用用户类存储。这是存储用户名值的地方。然而,当我尝试类似从Firebase数据库检索特定数据

mDatabase.child("users").child(UserID).child("profile").child("username").toString(); 

这给了我的路径到用户名,但不是用户名本身。有人知道如何获得用户名的价值吗?

编辑:它给了我一个错误,当我运行

DataSnapshot.child("users").child(mUserID).child("profile").child("username").getValue().toString(); 

这里是我的火力地堡数据库显示的用户名下方。

Firebase database profile

回答

2

你没有得到正确的值。您需要为您的孩子添加一个监听器并获取更新。你这样做:

// Get a reference to your user 
final FirebaseDatabase database = FirebaseDatabase.getInstance(); 
DatabaseReference ref = database.getReference("server/path/to/profile"); 

// Attach a listener to read the data at your profile reference 
ref.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     Profile profile = dataSnapshot.getValue(Profile.class); 
     System.out.println(profile.getUsername()); 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 
     System.out.println("The read failed: " + databaseError.getCode()); 
    } 
}); 

你可以找到更多关于Firebase website的信息和例子。请注意,您不会提出从Firebase获取数据的请求。您将侦听器附加到子级,然后从侦听器获取数据。此示例假定您有一个Profile模型,并具有获取用户名的方法。这将返回您的对象,并使您能够获取所需的任何数据。

+0

此代码位于ChildEventListener中。我应该使用ValueEventListener吗? –

+0

您也可以使用ChildEventListener。这给你一些其他的选项,如删除,更新,添加等。 – BlackHatSamurai

+0

如果我不使用模型类?我如何在没有它的情况下检索数据?或者是否有必要使用它? –

0

试试这个,你忘了的getValue(),将返回值不是路径mDatabase.child("users").child(UserID).child("profile").child("username").getValue().toString();

+0

当我尝试使用getValue方法时,Android Studio说它无法解析该方法。任何想法为什么?这是我的代码:String incom_username = mDatabase.child(“users”)。child(mUserId).child(“profile”)。child(“username”)。getValue()。toString(); –

+0

没关系。我正在使用数据库引用而不是DataSnapshot。谢谢! –

+0

其实,它仍然给我一个错误,说它不能将空对象引用转换为字符串。我会用一张图片更新我的问题。 –

相关问题