Я занимаюсь разработкой приложения для 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