【问题标题】:How can get the child values from firebase realtime database?如何从 firebase 实时数据库中获取子值?
【发布时间】:2021-11-04 10:16:46
【问题描述】:

如何从 Firebase 实时数据库中获取子值?

下面是我的架构:

Posts
|--firebase key
   |--title: test1
   |--sub: NY
   |--country: USA
 --firebase key
   |--title: test2
   |--sub: DC
   |--country: USA
 --firebase key
   |--title: test3
   |--sub: DC
   |--country: USA
 --firebase key
   |--title: test4
   |--sub: FRA
   |--country: EU
 --firebase key
   |--title: test5
   |--sub: UK
   |--country: EU

我想读取sub的值,但是像DC一样一共有三个值,但是我只想取一次,因为我想要实现的是有值的状态会显示在RecyclerView中,但是像AL、AZ、AL、AR等,还没有添加,所以不会显示。

那我该怎么做呢?

我会用这个方法来获取post country,那么如何显示subs呢?

DatabaseReference countryRef = FirebaseDatabase.getInstance().getReference("Posts");
        Query query = countryRef.orderByChild("country").equalTo(country);
        query.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }
        });

【问题讨论】:

    标签: java android firebase firebase-realtime-database android-recyclerview


    【解决方案1】:
    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    DatabaseReference postsRef = rootRef.child("Posts");
    postsRef.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
        @Override
        public void onComplete(@NonNull Task<DataSnapshot> task) {
            if (task.isSuccessful()) {
                List<String> posts = new ArrayList<>();
                for (DataSnapshot ds : task.getResult().getChildren()) {
                    String sub = ds.child("sub").getValue(String.class);
                    if(!posts.contains(sub)) {
                        posts.add(sub);
                    }
                }
                for (String post : posts) {
                    Log.d("TAG", post);
                }
            } else {
                Log.d("TAG", task.getException().getMessage()); //Don't ignore potential errors!
            }
        }
    });
    

    logcat 中的结果将是:

    NY
    DC
    AK
    

    如果您想在 Android 中的 RecyclerView 中显示这些结果,您应该考虑使用我在以下帖子中的回答:

    【讨论】:

    • 我希望只显示 NY、DC、AK。
    • 在这种情况下,请查看我的更新答案。 logcat 中的结果不会包含重复项。现在可以了吗?
    • 谢谢兄弟,但我忘记了非常重要的事情。我更新了我的上下文。因为我会有很多国家信息,如果用户选择美国那么它只是显示美国子,但如果用户选择欧盟那么它需要显示欧盟
    • 我已经更新了我的上下文,你能检查一下吗?
    • 如果您在读取数据方面遇到其他问题,请不要编辑实际问题,而是使用自己的MCVE 发布新问题,以便我和其他 Firebase 开发人员可以帮助您。跨度>
    【解决方案2】:

    首先使用此代码获取数据库引用

    private DatabaseRefrence mDatabase;
    mDatabase = FirebaseDatabase.getInstance().getReference();
    

    您可以使用此代码轻松获取孩子

    mFirstChild = mDatabase.child("child-name");
    mSecondChild = mFirstChild.child("2-child-name");
    

    【讨论】:

    • 我可以使用模型吗?因为我想在回收站视图中展示和使用 CardView。
    猜你喜欢
    • 1970-01-01
    • 2021-11-11
    • 2021-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    相关资源
    最近更新 更多