如何在 android 中为 firebase 数据库中的动态键和值创建模型 class

How to create a model class for dynamic keys and values in firebase database in android

如何检索模型中的所有关键节点和值class?

Here 是我的数据库模式。

How to create a model class for dynamic keys?

你没办法做到这一点。你 不能 在 class 中有动态变量名。 class 中存在的字段名称应与数据库中存在的字段名称相匹配。但是,有一种方法可以读取动态数据,那就是:

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
...

此外,请记住,所有值都需要具有相同类型的数据。正如我在您的架构中看到的那样,您没有。有些是字符串,有些是数字:

所以尝试把所有的值都改成字符串,代码可能保持不变,或者,把所有的值都改成数字,使用:

long value = ds.getValue(Long.class);

对于键,您无需执行任何操作,因为所有键都是字符串。