【问题标题】:How to create a model class for dynamic keys and values in firebase database in android如何在android的firebase数据库中为动态键和值创建模型类
【发布时间】:2021-12-13 08:12:51
【问题描述】:

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

Here 是我的数据库架构。

【问题讨论】:

    标签: java android firebase firebase-realtime-database google-cloud-platform


    【解决方案1】:

    如何为动态键创建模型类?

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

    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);
    

    如果是键,则无需执行任何操作,因为所有键都是字符串。

    【讨论】:

    • 那么如何根据各自的用户在 reyclerview 上检索这些数据
    • 听起来您的问题始于“如何为动态键和值创建模型类”,但现在您要问的是如何在 RecyclerView 中显示数据。这是working solution 的示例。在这一点上,我建议您自己尝试实现这一目标,如果出现其他问题,请提出另一个问题。这样,我或其他 Firebase 开发人员就能为您提供帮助。
    • 如果您认为我的回答对未来的 Firebase 开发人员也有帮助,也请考虑 giving a vote-up (▲)。我真的很感激。谢谢!
    猜你喜欢
    • 2011-10-18
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2011-12-05
    • 2021-12-18
    • 2011-06-10
    • 1970-01-01
    • 2018-02-14
    相关资源
    最近更新 更多