我是使用firebase的新手,我不明白如何从我的数据库中获取单个字符串
我的数据库
我想写一个获取用户ID并返回其名字的函数。我尝试了很多东西,但没有成功。有人能给我这个功能还是告诉我怎么写它?
这就是我的尝试:
public void checkFunction() {
final FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("Users").child("0");
ValueEventListener UserFromID = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
return dataSnapshot.getValue().toString();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
myRef.addValueEventListener(UserFromID);
}
但是我收到以下错误
无法从void结果类型为
的方法返回值
答案 0 :(得分:0)
理想情况下,我们需要了解您正在尝试做的事情。
应用的用户是否可以访问所有这些用户ID?或者他们应该只访问自己的?他们是管理员还是最终用户等?
当您说“获取用户ID的函数”时,您是说您提供了ID,该函数是否返回该用户ID中的人的姓名?此外,在这种情况下,您要对 0 的用户ID进行硬编码。这仅仅是为了测试吗? 您是使用Firebase Auth进行用户注册等,还是没有注册?
如果不了解更多内容,很难回答这个问题,但我们假设用户最多可以从Firebase获取他们有权访问的任何字符串。 (如果使用Firebase Auth,则DatabaseReference略有不同)
因此,您需要一个映射到树中正确节点的DatabaseReference。在您的示例中,用户将无法访问用户1和2.(这是您想要的吗?)。在我的例子中,他们可以访问0,1和2。
现在,您只需向您要查找的数据库引用的子项添加一个侦听器。在下面的例子中,我们要求的是具有键“0”的值。
public void checkFunction() {
private FirebaseDatabase mRef;
//String variable to store whatever value we're looking for
String mName = "";
//Our reference knows only "Users" and all of its children
mRef = FirebaseDatabase.getInstance().getReference().child("Users");
//Adding a listener for the value associated with the user key "0"
mRef.child("0").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
//In this case, "shalom" will be stored in mName
mName = (String) snapshot.getValue();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
希望这能让您更容易理解最新情况。
如果不了解更多信息,很难回答,但我怀疑你需要重新考虑数据库的结构。也许更符合下面结构的内容,其中 RandomUserIdsHere 是在使用Firebase Auth注册时分配给每个用户的自动生成的uid。
todofirebaseapp-4c83d{
"Users" :{
"*RandomUserIdsHere*" : {
"FirstName" : "Joe",
"LastName" : "Bloggs",
"Age" : "30"
}
"*AnotherRandomUserIdsHere*" : {
"FirstName" : "Jane",
"LastName" : "Doe",
"Age" : "21"
}
"*AnotherRandomUserIdsHere*" : {
"FirstName" : "John",
"LastName" : "Doe",
"Age" : "47"
}
}
}
在这种情况下,DatabaseReference看起来会有所不同。我们会像这样在uid中传递。
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid;
mRef = FirebaseDatabase.getInstance().getReference("todofirebaseapp-4c83d").child("Users").child(uid);
编辑:纠正我无法拼写。