- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个名为 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/
我是一名优秀的程序员,十分优秀!