这是我的结构Firebase数据库。我需要将所有订单详细信息(orderdate,ordername等)发送到arraylist。但是我不知道会有多少订单(order1,order2 ...)。
这是我的模型课:
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) {
} });
但是此代码不起作用。请需要帮助!
答案 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循环之外。