【问题标题】:How do I display the child elements of Firebase Realtime Database in a RecyclerView?如何在 RecyclerView 中显示 Firebase 实时数据库的子元素?
【发布时间】:2021-09-23 03:32:39
【问题描述】:

我正在开发一个电子商务应用程序,我想按客户完成的订单显示产品列表。我可以显示订单的详细信息,但无法显示该订单中的产品列表。

请看下图。我想在 RecyclerView 中显示这 2 个产品及其详细信息。

这是我的代码

databaseReference.child("Orders").child(shopId).child(orderId).orderByChild(orderId).equalTo(orderId)
        .addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        ArrayList<PlaceOrder> placeOrderArrayList = new ArrayList<>();
        for (DataSnapshot ds : dataSnapshot.getChildren()){
            placeOrderArrayList.add(ds.getValue(PlaceOrder.class));
        }
        UserOrderDetailsAdapter userOrderDetailsAdapter = new UserOrderDetailsAdapter(UserOrderDetailsActivity.this,placeOrderArrayList);
        productsRv.setAdapter(userOrderDetailsAdapter);
        userOrderDetailsAdapter.notifyDataSetChanged();
    }

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

    }
});

【问题讨论】:

    标签: java android firebase firebase-realtime-database


    【解决方案1】:

    您需要对名为“orderId”的子项进行排序,而不是对orderId 变量的值进行排序:

    databaseReference.child("Orders").child(shopId).child(orderId)
       .orderByChild("orderId").equalTo(orderId)
    

    您的数据结构未遵循 structuring data 上的 Firebase 文档中概述的最佳做法。我特别推荐阅读limiting nestingflattening data structures,并考虑创建两个顶级节点:OrdersOrderItems,每个节点下都有$orderId 作为键。像这样分离数据类型最不可能需要更改数据模型。

    【讨论】:

      猜你喜欢
      • 2021-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-15
      • 1970-01-01
      相关资源
      最近更新 更多