我有一个名为Routine的类,它具有属性名称和练习。在RoutineExercises类型的ArrayList中练习。
当我将我的Routine编写到我的Firestore数据库时,它的工作方式应该是这样,并为我的ArrayList中的所有对象添加一个带有名称和数组的文档。
但是我认为将练习存放在与名称相同的文档中并不是一个好主意,因为我有时候不需要这些练习。所以我想创建另一个Collection" 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()
返回我的常规集合。
但我是例外:
java.lang.IllegalArgumentException:数据无效。数据必须是Map或合适的POJO对象
答案 0 :(得分:2)
要使用add(),您必须传递Map或Object。如果要添加对象,则必须具有空构造函数以及其属性here的所有getter。
每个自定义类必须具有不带参数的公共构造函数。此外,该类必须包含每个属性的公共getter
如果您想插入练习列表,可以试试这个:
HashMap<String, Exercise> exerciseMap = new HashMap<String, Exercise ();
for (Exercise exercise : exerciseList) {
exerciseMap.put(exercse.getExerciseCode(), exercise);
}
基于this回答。
答案 1 :(得分:0)
根据我对你的问题的理解,你想在你的例行文件中创建一个练习子集。 以下代码将所有练习添加到您的例程文档中的RoutineExercises集合中。 据我所知,你不能直接将ArrayList保存为子集合。
fm.getColRefUserRoutines().add(routine).addOnSuccessListener(new
OnSuccessListener<DocumentReference>() {
@Override
public void onSuccess(DocumentReference documentReference) {
for (Exercise exercise: routine.getExcersises()) {
documentReference.collection("RoutineExercises").add(exercise).addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
@Override
public void onSuccess(DocumentReference documentReference) {
Log.d("Success", "!!");
}
});
}
}
});