Android:如何将所有子列表从Firebase获取到arraylist

时间:2019-02-15 15:04:57

标签: android firebase arraylist firebase-realtime-database

这是我的结构Firebase数据库。我需要将所有订单详细信息(orderdate,ordername等)发送到arraylist。但是我不知道会有多少订单(order1,order2 ...)。

database strukture

这是我的模型课:

public class OrderDetails {
String orderdate,ordername;

public OrderDetails() {
}

public OrderDetails(String orderdate, String ordername) {
    this.orderdate = orderdate;
    this.ordername = ordername;
}

public String getOrderdate() {
    return orderdate;
}

public void setOrderdate(String orderdate) {
    this.orderdate = orderdate;
}

public String getOrdername() {
    return ordername;
}

public void setOrdername(String ordername) {
    this.ordername = ordername;
} }

这是我的代码:

 ref = FirebaseDatabase.getInstance().getReference().child("Customers").child(cityID).child(customerID).child("orders");

List<OrderDetails> orderList = new ArrayList<>();

ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

    for( DataSnapshot postSnapshot : dataSnapshot.getChildren()){
        OrderDetails details = postSnapshot.getValue(OrderDetails.class);
        orderList.add(details);
        toast.makeText(getContext(), orderList, Toast.LENGTH_SHORT).show();
    }
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {

} });

但是此代码不起作用。请需要帮助!

1 个答案:

答案 0 :(得分:0)

代码中的问题是,您将makeText()对象而不是字符串作为List方法的第二个参数传递。您收到以下消息:

  

[com.example.janedtj.shopapk.models.OrderDetails@8a15b85,com.example.janedtj.shopapk.models.OrderDetails@474adda]

实际上是toString()方法返回的内容。它表示List对象在内存中的地址。例如,如果要显示订单名称属性的内容,请更改以下代码行:

Toast.makeText(getContext(), orderList, Toast.LENGTH_SHORT).show();

Toast.makeText(getContext(), details.getOrdername(), Toast.LENGTH_SHORT).show();

还请注意,如果要获取列表的大小,则需要以下代码行:

for( DataSnapshot postSnapshot : dataSnapshot.getChildren()){
    OrderDetails details = postSnapshot.getValue(OrderDetails.class);
    orderList.add(details);
}
Toast.makeText(getContext(), String.valueOf(orderList.size()), Toast.LENGTH_SHORT).show();

并且应该将其放置在for循环之外。