如何在recyclerview(FirebaseRecyclerOptions)中为特定用户显示所有孩子

Posted

技术标签:

【中文标题】如何在recyclerview(FirebaseRecyclerOptions)中为特定用户显示所有孩子【英文标题】:how to show all children in a recyclerview (FirebaseRecyclerOptions) for a specific user 【发布时间】:2021-12-10 20:05:57 【问题描述】:

new database structure

这就是我使用 FirebaseRecyclerOptions 为每个用户显示数据的方式。

但我想通过检查具有 UID 或任何其他解决方案的用户来仅获取具有条件的特定用户的所有子数据。

Ps:由于数据库结构发生了变化,本帖被多次编辑

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) 

         v = inflater.inflate(R.layout.fragment_pdv, container, false);
        recyclerView = v.findViewById(R.id.pdv_list);
        recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
      
     
           
        if (user_id.equals("hZBCb9yk8ycamjoVcISjG2y4ZnI2"))
        Query query = FirebaseDatabase.getInstance("https://dtechapp-94795-default-rtdb.europe-west1.firebasedatabase.app")
                .getReference().child("commande").orderByChild("user_id").equalTo("hZBCb9yk8ycamjoVcISjG2y4ZnI2"); ;

        FirebaseRecyclerOptions<Order> options =
                new FirebaseRecyclerOptions.Builder<Order>()
                        .setQuery(query, Order.class)
                        .build();


        pdvAdapter = new PdvAdapter(options);
  recyclerView.setAdapter(pdvAdapter);
        return v;
       

【问题讨论】:

你目前得到了什么? 它不起作用.... zoneRef 是什么意思?是 rootRef 吗?顺便说一下 user_id 是一个字符串---- String user_id = FirebaseAuth.getInstance().getCurrentUser().getUid() 更新答案请查看。 它不起作用。 我没有得到任何清晰的数据 【参考方案1】:

当您使用以下查询时:

Query query = FirebaseDatabase.getInstance("https://dtechapp-94795-default-rtdb.europe-west1.firebasedatabase.app")
            .getReference("pdv").child("user_id");

这意味着您正在尝试从以下位置读取数据:

rootRef/pdv/user_id

这样的引用实际上存在。在您的“pdv”节点下,有一个名为“user_id”的 no 子节点,但有一个名为“fP0LLs83MYZqX9BqYO24IX80F3Q2”的子节点。所以你要么使用:

Query query = FirebaseDatabase.getInstance("https://dtechapp-94795-default-rtdb.europe-west1.firebasedatabase.app")
            .getReference("pdv").child("fP0LLs83MYZqX9BqYO24IX80F3Q2");

或者,如果用户的 UID 来自 Firebase 身份验证操作,那么您可以简单地使用:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
Query query = FirebaseDatabase.getInstance("https://dtechapp-94795-default-rtdb.europe-west1.firebasedatabase.app")
            .getReference("pdv").child(uid);

编辑:

根据您的一位 cmets:

所以我想同时从所有用户的孩子那里获取数据。这是第一个用户“fP0LLs83MYZqX9BqYO24IX80F3Q2”我想让孩子进入他,同时,我想从第二个用户“hZBCb9yk8ycamjoVcISjG2y4ZnI2”中获得孩子并将其显示在我的 RecyclerView 中。

根据您的database schema,请注意您无法做到这一点。您无法让所有用户都拥有这样的架构。实时数据库中的查询在节点的平面列表上工作。除此之外,您在 UID 节点下有一个未知键,这使得无法查询。为了解决这个问题,您应该考虑在树中删除一个级别,并在每个 UID 节点中添加“Amine”和“Zouaoui...”作为属性。您的架构应如下所示:

Firebase-root
  |
  --- pvd
       |
       --- $uid
       |     |
       |     --- type: "Amine..."
       |     |
       |     --- //Other fields.
       |
       --- $uid
             |
             --- type: "Zouaoui..."
             |
             --- //Other fields.

代码可能保持不变。

【讨论】:

谢谢,但这不是我想要的(我在 if 条件下的 else 中使用它)。我正在寻找的是向两个用户的孩子展示这意味着“Amine”和“Zouaoui ...” 在这种情况下,您应该再调用一次.child(),像这样.child("Amine")。试一试,告诉我它是否有效。 它不起作用 你明白我到底想要什么吗?! 是的,它有效。非常感谢

以上是关于如何在recyclerview(FirebaseRecyclerOptions)中为特定用户显示所有孩子的主要内容,如果未能解决你的问题,请参考以下文章

当 Recyclerview 在 NestedScrollview 中时,如何避免绑定所有项目?

如何在 RecyclerView 中使用 ItemAnimator?

如何在 RecyclerView 中选择位置?

如何在 RecyclerView 中实现 StartActivityForResult

如何在 RecyclerView 中使用 offsetChildrenHorizo​​ntal()

如何在android的Recyclerview中显示更多[重复]