【问题标题】:Nested list object in firebase androidfirebase android中的嵌套列表对象
【发布时间】:2018-07-04 08:26:06
【问题描述】:

https://ibb.co/ieRwsJ

https://ibb.co/c4xmsJ

https://ibb.co/d8gJ6d

这是我的数据库结构。

order
  key
    address
    cart node with 3 childs
    phone
    total etc

我已经尝试了所有方法来进入创建的购物车对象,但是当它给我一个错误并且当我尝试在 recyclerview 中检索它时,它只会返回第一个“0”子对象。我尝试过使用 hashmaps 和 arraylists,并且我还提供了 recyclerview 适配器来显示数据的检索。

//this is my pojo below.

public class Order {

private String phone;
private String address;
private String time;
private String date;
private String message;
private String total;
private HashMap<String,Cart> cart;
private String tax;
private String status;

public Order() {
}

//getter and setter


//code for looping over the child node
  orderDB.child("orders").child(currentUser).addValueEventListener(new 
  ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            if (dataSnapshot.exists()) {
                for (DataSnapshot orderSnapshot : dataSnapshot.getChildren()) {
                    Order order = orderSnapshot.getValue(Order.class);
                    onGoingOrderList.add(order);                   
                    rvOnGoingOrders.setAdapter(onGoingOrderadapter);

                }

            }
        }

//code for my adapter
public void onBindViewHolder(OngoingOrderViewholder holder, int position) {
   holder.tvProductnameOngoingOrders.setText(onGoingOrderArrayList.get(position).getCart().get(position).getName());

如果我将数据检索到哈希图中,这是我得到的错误 https://ibb.co/d8gJ6d

【问题讨论】:

  • 请将您的数据结构/代码发布为文本而不是图像/链接。
  • 改成文字了。
  • "它给了我一个错误,当我尝试检索它时"什么错误?
  • 另请注意,您需要在onDataChange 末尾调用onGoingOrderList.notifyDataSetChanged()
  • 我认为从 firebase 获取数据的最佳方法是在 for 循环中创建一个数组列表,并通过 pojo 类添加所有数据。然后使用 arraylist.get(position).getProperty 在 recyclerview 适配器中检索它。我已经填充了许多 recyclerviews,但这次它似乎根本不起作用。我已经编辑了我的代码并将 setAdapter 放在 for 循环中,这是检索数据的标准,并且已经多次执行,但是在 POJO 中使用 arraylist 作为变量,它似乎不起作用。

标签: android firebase arraylist firebase-realtime-database nested


【解决方案1】:

您的代码中的问题是您在 for 循环中设置了适配器。要解决这个问题,请移动以下代码行:

rvOnGoingOrders.setAdapter(onGoingOrderadapter);

退出 for 循环,否则最终只会显示一项。

【讨论】:

  • 不幸的是它没有工作仍然只显示 1 个项目。用你的逻辑编辑了我的问题。
  • 如果您在这行代码rvOnGoingOrders.setAdapter(onGoingOrderadapter); 之后尝试使用Log.d("TAG", onGoingOrderList.toString());,它会打印什么?列表有项目还是为空?
  • 不,它不是空的,因为我正在从列表中检索第一个项目ibb.co/jmy4wd
  • 请看here 看看设置适配器的内容。
  • 我认为你应该看看我的数据结构一次。如果可能的话,你可以建议一种更好的方式来构建订单节点的数据。
猜你喜欢
  • 1970-01-01
  • 2017-11-13
  • 2021-11-12
  • 1970-01-01
  • 1970-01-01
  • 2018-11-19
  • 2022-01-07
  • 2016-02-20
  • 1970-01-01
相关资源
最近更新 更多