【问题标题】:Android: How to get all child list from Firebase to arraylist [closed]Android:如何将所有子列表从 Firebase 获取到 arraylist [关闭]
【发布时间】:2019-02-15 15:04:56
【问题描述】:

这是我的结构 Firebase 数据库。我需要将所有订单详细信息(订单日期、订单名称等)发送到 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) {

} });

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

【问题讨论】:

  • 你为什么说它不起作用?你有错误吗?你是怎么测试的?
  • 我添加吐司 toast.makeText(getContext(), orderList, Toast.LENGTH_SHORT).show();并获得下一个日期:[com.example.janedtj.shopapk.models.OrderDetails@8a15b85, com.example.janedtj.shopapk.models.OrderDetails@474adda]
  • 请将该行代码添加到您的实际代码中。
  • 我添加了这一行。
  • 如果你在使用Toast.makeText(getContext(), details.getOrdername(), Toast.LENGTH_SHORT).show();,它会烤出订单的名称吗?

标签: android firebase arraylist firebase-realtime-database


【解决方案1】:

您的代码中的问题是您将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 循环之外。

【讨论】:

  • 请看我更新的答案。现在可以用了吗?
  • 大小再次为0。
  • 请在您的问题中添加您为此使用的整个代码。
  • 它正在工作。太感谢了。但是当我添加这一行时 Toast.makeText(getContext(), String.valueOf(orderList.size()), Toast.LENGTH_SHORT).show();在 addValueEventListener 之外,大小为 0。为什么?
  • 好的,谢谢! :) 我创建了一个新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-13
  • 2016-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多