com.google.firebase.database.DatabaseException:序列化数组不支持,请使用列表

我正在尝试使用以下代码来保留自定义对象:

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: Serializing Arrays is not supported, please use Lists instead 。 我的对象不包含任何数组,所以这个错误看起来很混乱。 我find了一种方法来解决这个错误 – 一切工作正常,如果我从我的Exercise类添加@Exclude注释bodyParts列表,但它显然不是我想要实现的。

那么似乎Firebase无法坚持包含内部列表的对象? 这里有没有简单的解决方法或最佳实践? 谢谢!

PS我正在使用firebase-database:9.2.1

Solutions Collecting From Web of "com.google.firebase.database.DatabaseException:序列化数组不支持,请使用列表"

我设法find造成这次崩溃的原因。 我在运行Android 5.x的另一台设备上安装了该应用程序,并且Firebase引发了一个不那么令人困惑的例外:

 com.google.firebase.database.DatabaseException: No properties to serialize found on class android.graphics.Paint$Align 

看起来,Firebase( 不像Gson )试图序列化所有可能的getter,即使它们没有与全局variables(类成员/字段)的直接连接,在我的具体情况下,我的一个对象包含一个返回DrawablegetDrawable() 。 显然,Firebase不知道如何将drawable转换成json。

有趣的时刻(可能是Firebase SDK中的一个错误):在运行Android 4.4.1的旧版本设备上,我仍然在同一个项目和configuration中获得原始exception:

 Caused by: com.google.firebase.database.DatabaseException: Serializing Arrays is not supported, please use Lists instead 

我有一个类似的问题,我试图使用groovy而不是Java,我想groovy正在为我生成其他获取方法。 我将我的域类从Pogo(src / main / groovy)转换为Pojo(src / main / java),现在一切正常

将@Exclude添加到FB试图解释的函数中,如返回Drawable的函数。

 @Exclude public Drawable getUnitColorImage(){ return TextDrawable.builder().buildRound("", prefColor); } 

将@IgnoreExtraProperties添加到您的类中

 @IgnoreExtraProperties public class YourPojo { public String name; // Default constructor for Firebase public YourPojo(){} // Normal constructor public YourPojo(String name) { this.name = name; } } 

这是如何解决我的。 当我试图更新数据库中的int字段时,发生了这个问题。 我从编辑文本字段中获取文本,并忘记将其转换为int。 这导致了失败。 因此,如果发生此问题,请尝试检查发送到数据库的数据types。

如果这有助于其他人收到相同的错误,我得到了同样的错误和解决scheme结束了以下对我来说:

更改:

 databaseReference.child("somechild").setValue(etName.getText()); 

至:

 databaseReference.child("somechild").setValue(etName.getText().toString()); 

正如@fraggjkee指出的那样,Firebase试图序列化getter,这与firebase试图序列化.getText()的结果是类似的问题。

希望这可以帮助别人!