首页 > 解决方案 > 有没有办法将自定义对象列表放在 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 

标签: javaandroidfirebasenestedgoogle-cloud-firestore

解决方案


推荐阅读