我正在做一个带有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) {
}
});
}
User类:
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;
}
}
如何从每个特定用户那里获取名称和分数
答案 0 :(得分:2)
在您的代码中,您正在设置值,需要使用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()
:
此外,您可以将自己的类的实例设置在此位置,只要它们满足以下约束:
- 该类必须具有不带参数的默认构造函数
- 该类必须为要分配的属性定义公共获取方法。反序列化实例时,没有公共获取器的属性将设置为其默认值
您需要向POJO类public User(){}
添加默认构造函数,并且该类中的字段名称应与数据库中的字段名称匹配。因此,将此String strName, strScore;
更改为String name, score;
,然后再次生成吸气剂和吸气剂。
答案 1 :(得分:0)
您可以使用全局配置文件节点,而不是在每个节点中创建配置文件,并在其中存储配置文件数据及其UID,这将使您更轻松地获取单个用户的详细信息。
-profile
-UID1
-name
-score
-UID2
-name
-score
检索时,可以使用getCurrentUser.getUid()检索每个用户的数据:
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
databaseReference.child("users").child("profile").child(uid).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
User user = new User();
user = dataSnapshot.getValue(User.class);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});