Android:使用Firebase中的ArrayList检索对象

时间:2016-06-28 12:48:01

标签: android arraylist firebase firebase-realtime-database

我是Firebase的新手,面临以下问题:

我将一个对象(Bill)上传到我的firebase,一个属性是一个ArrayList。它适用于上传。

但是当我检索数据时,由于ArrayList

,我得到了错误

com.firebase.client.FirebaseException: Failed to bounce to type

Firebase Structure

主要活动:

Firebase billRef = new Firebase(getResources().getString(R.string.FB_billRef));

Query billQuery = billRef.orderByChild("status").equalTo("Ordered");
billQuery.addChildEventListener(
        new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                Bill bill = dataSnapshot.getValue(Bill.class);

            }

            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {

            }

            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onCancelled(FirebaseError firebaseError) {

            }
        }
);

Bill.class:

public class Bill {

    private int billID;
    private int tableID;
    private int numCustomer;
    private String status;
    private ArrayList<Order> orders;


    public Bill(int billID, int tableID, int numCustomer,String status,ArrayList<Order> orders){
        this.billID = billID;
        this.tableID = tableID;
        this.numCustomer = numCustomer;
        this.status = status;
        this.orders = orders;
    }

    public ArrayList<Order> getOrders() {
        return orders;
    }

    public void setOrders(ArrayList<Order> orders){
        this.orders = orders;
    }
    public void addOrder(Order o){}

    public void delOrder(int orderID){}

    public int getBillID(){return billID;}
    public int getTableID(){return tableID;}
    public int getNumCustomer(){return numCustomer;}
    public String getStatus(){return status;}

}

如何将这种类型的firebase对象检索到java对象? 非常感谢!

我必须处理的唯一方法是逐个分解DataSnapshot属性并使用 datasnapshot.child(“orders”)获取Order.getChildren()

但这不是一个好方法。我可以直接获得Bill Object的任何方法吗?

1 个答案:

答案 0 :(得分:1)

我知道对于那个问我的人来说可能有点晚了,但至少对其他人来说...... 使用HashMaps而不是ArrayLists很有帮助。 Firebase基于散列图,因此您可以按键访问任何属性。在这种情况下,我建议您使用HashMap,而不是由数组列表表示的Bills属性。 (这对更新密钥也很有帮助)