我正在尝试使用以下代码保留自定义对象:
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
DatabaseReference curWorkoutExercisesRef = databaseReference.child("workouts")
.child(mCurrentWorkout.getId())
.child("workoutExercises");
WorkoutExercise we = new WorkoutExercise(exercise);
curWorkoutExercisesRef.push().setValue(we);
这是我的对象:
public class WorkoutExercise {
private String id;
private Exercise exercise;
public WorkoutExercise() {}
// getters, setters, other methods
// ...
}
public class Exercise {
private String id;
private String title;
private List<BodyPart> bodyParts;
public Exercise() {}
// getters, setters, other methods
// ...
}
public class BodyPart {
private String id;
private String name;
public BodyPart() {}
// getters, setters, other methods
// ...
}
每次我收到此错误 - com.google.firebase.database.DatabaseException:不支持序列化数组,请改用列表
。我的对象不包含任何数组,所以这个错误看起来很困惑。我找到了修复此错误的方法 - 如果我将 @Exclude
注释添加到我的 Exercise
类的 bodyParts
列表中,一切正常,但它显然不是我想要达到的目标。
看来 Firebase 无法持久化包含内部列表的对象?这里有任何简单的解决方法或最佳实践吗?谢谢!
附言我正在使用 firebase-database:9.2.1
最佳答案
如果这有助于其他收到相同错误的人,我也遇到了同样的错误,最终解决方案对我来说如下:
改变:
databaseReference.child("somechild").setValue(etName.getText());
收件人:
databaseReference.child("somechild").setValue(etName.getText().toString());
正如@fraggjkee 指出的那样,Firebase 尝试序列化 getter,这与 firebase 尝试序列化 .getText()
的结果的问题类似。
希望这对其他人有帮助!
关于java - com.google.firebase.database.DatabaseException : Serializing Arrays is not supported, 请改用列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38673490/