Android:使用 ArrayList 从 Firebase 检索对象
Posted
技术标签:
【中文标题】Android:使用 ArrayList 从 Firebase 检索对象【英文标题】:Android: Retrieve object with ArrayList from Firebase 【发布时间】:2016-10-30 19:26:38 【问题描述】:我是 Firebase 的新手,面临以下问题:
我将一个对象(Bill)上传到我的 Firebase,其中一个属性是 ArrayList。它适用于上传。
但是当我检索数据时,由于 ArrayList 而出现错误
com.firebase.client.FirebaseException: Failed to bounce to type
主要活动:
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").getChildren()
但这不是一个好方法。有什么方法可以直接获取账单对象吗?
【问题讨论】:
你试过用List
代替ArrayList
吗?
在您的 logcat 中,在该错误消息下,将有一个堆栈跟踪。在该堆栈跟踪中,它将指定问题的实际原因(通常在Caused by
之后)。
尝试向Bill
添加一个无参数构造函数。
Re adolfosrs:我做了,但出现了同样的错误。
@FrankvanPuffelen 该错误是由 ArrayList 命令引起的。以下是错误:Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.util.ArrayList out of START_OBJECT token at [Source: java.io.StringReader@1d5e2d2; line: 1, column: 32] (through reference chain: com.test.Class.Bill["orders"])
【参考方案1】:
我知道对于提问的人我可能会迟到一点,但至少对其他人来说...... 使用 HashMaps 而不是 ArrayLists 很有帮助。 Firebase 基于哈希图,因此您可以通过键访问任何属性。在这种情况下,建议您使用 HashMap,而不是由数组列表表示的 Bills 属性。 (这也有助于更新密钥)
【讨论】:
以上是关于Android:使用 ArrayList 从 Firebase 检索对象的主要内容,如果未能解决你的问题,请参考以下文章
Android Wi-Fi Direct P2P 将数据从服务器发送到客户端
如何从 Android 中 ArrayAdapter 上的 ArrayList 更新项目
从 JSONArray 转换为 ArrayList<CustomObject> - Android