gpt4 book ai didi

android - Firestore : Create a Subdocument of ArrayList inside a Document

转载 作者:搜寻专家 更新时间:2023-11-01 09:26:59 24 4
gpt4 key购买 nike

我有一个名为 Routine 的类,它具有属性名称和练习。 RoutineExercises 类型的 ArrayList 中的练习。

当我将我的例程写入我的 Firestore 数据库时,它会像它应该的那样工作,并添加一个带有名称的文档和一个用于练习的数组,其中包含我的 ArrayList 中的所有对象。

但是我认为将练习与名称存储在同一个文档中可能不是一个好主意,因为有时我不需要这些练习。所以我想在我的 Routine Document 中创建另一个集合“RoutineExercises”,其中包含 RoutineExercises 的 ArrayList。这是我的代码的样子:

fm.getColRefUserRoutines().add(routine).addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
@Override
public void onSuccess(DocumentReference documentReference) {
documentReference.collection("RoutineExercises").add(routine.getExcersises()).addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
@Override
public void onSuccess(DocumentReference documentReference) {
Log.d("Success", "!!");
}
});
}
});

同时 fm.getColRefUserRoutine() 返回我的例程集合。

但我异常(exception):

java.lang.IllegalArgumentException: Invalid data. Data must be a Map or a suitable POJO object

最佳答案

为了使用 add(),您必须传递一个 Map 或一个 Object。如果添加一个对象,你必须有一个空的构造函数和它的属性的所有 getter here .

Each custom class must have a public constructor that takes no arguments. In addition, the class must include a public getter for each property

如果你想插入你的练习列表,你可以试试这个:

HashMap<String, Exercise> exerciseMap = new HashMap<String, Exercise (); 
for (Exercise exercise : exerciseList) {
exerciseMap.put(exercse.getExerciseCode(), exercise);

}

基于this回答。

关于android - Firestore : Create a Subdocument of ArrayList inside a Document,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49840957/

24 4 0