我正在用 firebase 做一个项目,能够在数据库中保存一些记录,但检索它对我来说是个问题,我已经干预了 SO 的其他帖子,但它们对我没有用。这是数据库的样子(一个例子):
以及我检索数据的代码:
private void readDataFromDB() {
databaseReference.child("users").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
User user = new User();
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
user.setStrName(//Get the Name of the user);
user.setStrScore(//Get the Score of the user));
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
用户类:
public class User {
String strName, strScore;
public String getStrName() {
return strName;
}
public void setStrName(String strName) {
this.strName = strName;
}
public String getStrScore() {
return strScore;
}
public void setStrScore(String strScore) {
this.strScore = strScore;
}
}
如何获取每个特定用户的姓名和分数
最佳答案
在您的代码中,您正在设置值,您需要使用 getter 检索值。
尝试以下操作:
databaseReference.child("users").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
User user = dataSnapshot.getValue(User.class);
String name = user.getStrName();
String score = user.getStrScore();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
但是,首先您需要将值添加到数据库示例中:
User user = new User();
user.setStrName("my_name");
user.setStrScore("20");
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("users");
ref.push().setValue(user);
备注setValue()
:
In addition, you can set instances of your own class into this location, provided they satisfy the following constraints:
- The class must have a default constructor that takes no arguments
- The class must define public getters for the properties to be assigned. Properties without a public getter will be set to their default value when an instance is deserialized
您需要向 POJO 类 public User(){}
添加一个默认构造函数,并且该类中的字段名称应与数据库中的字段名称相匹配。因此,将此 String strName, strScore;
更改为此 String name, score;
并再次生成 getter 和 setter。
关于java - Firebase 实时数据库 - 读取嵌套数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53249652/