【发布时间】:2021-12-13 08:12:51
【问题描述】:
如何检索模型类中的所有关键节点和值?
Here 是我的数据库架构。
【问题讨论】:
标签: java android firebase firebase-realtime-database google-cloud-platform
如何检索模型类中的所有关键节点和值?
Here 是我的数据库架构。
【问题讨论】:
标签: java android firebase firebase-realtime-database google-cloud-platform
如何为动态键创建模型类?
你无法做到这一点。您不能在类中拥有动态变量名。类中存在的字段名称应与数据库中存在的字段名称相匹配。但是,有一种方法可以读取动态数据,那就是:
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = rootRef.child("MyData").child(uid);
uidRef.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
@Override
public void onComplete(@NonNull Task<DataSnapshot> task) {
if (task.isSuccessful()) {
for (DataSnapshot ds : task.getResult().getChildren()) {
String key = ds.getKey();
String value = ds.getValue(String.class);
Log.d("TAG", key + "/" + value);
}
} else {
Log.d("TAG", task.getException().getMessage()); //Don't ignore potential errors!
}
}
});
假设“S71M ... b7z1”是经过身份验证的用户的 UID,这将起作用。如果不是,您必须在第二个 .child("S71M ... b7z1") 调用中对该值进行硬编码。
以上代码会在logcat中产生如下结果:
3/10
13/60
...
另外,请记住,所有值都需要具有相同类型的数据。正如我在您的架构中看到的那样,您没有。有些是字符串,有些是数字:
所以试着把所有的值都改成String,代码可能不变,或者,把所有的值都改成数字和使用:
long value = ds.getValue(Long.class);
如果是键,则无需执行任何操作,因为所有键都是字符串。
【讨论】: