有没有办法将自定义对象列表放在cloud-firestore中的自定义对象中

时间:2019-04-05 23:46:05

标签: java android firebase nested google-cloud-firestore

我正在使用Cloud Firestore开发用于大学项目的android应用程序,我想知道是否可能在文档中包含一个字段,该字段是自定义对象的数组(该文档本身也是自定义对象) 我认为这是某种嵌套。

我已经可以使用自定义对象(收据)。我有一个代表Artciles的字符串数组列表。目前,那些格式化的字符串使我可以对其进行解析,以读取价格,商品的数量和名称,但是将来我可能需要添加更多数据。 我曾考虑过使用子集合,但我需要能够直接下载整个文档。

public class Ticket{

    // TICKET DATA
    private Date date;
    private double cashIn;
    ...


    // ARTICLES LIST DATA
    private ArrayList<String> basket;//What I want to change

    public Ticket(){
        // EMPTY CONSTRUCTOR NEEDED
    }
//With other constructors, setters and getters and parsing code

如果我将ArrayList中的类型替换为自定义对象类型,则会出现此错误:

Could not deserialize object. Can't convert object of type java.lang.String to type com.ereceipt.e_receipt.Objects.Article (found in field 'basket.[0]')

我使用以下方法在点击回调中从Firebase到Java对象进行“转换”:

DocumentSnapshot documentSnapshot = // Some query (kind of big, you might not need it)
Ticket ticket = documentSnapshot.toObject(Ticket.class);

这是当前的Article类,稍后将对其进行升级以用于将来的功能:

public class Article{
    private String name;
    private int amount;
    private double unitprice;

    public Article(){

    }
    ...
}

我的数据库仅由一个称为收据的集合组成,而文档如下:

receipt/basket (an array)
receipt/basket[0]/name (String)
receipt/basket[0]/amount (number)
receipt/basket[0]/unitprice (number)
receipt/cashIn (number)
receipt/store/name (String)
receipt/store/address (String)
receipt/store/message (String)
receipt/timestamp 

0 个答案:

没有答案