我正在使用FirebaseDatabase而我无法解决非常恼人的崩溃。
每次我尝试执行:
FirebaseDatabase.getInstance().getReference().child("...").push().setValue(...)
应用程序崩溃,我收到此消息:
com.google.firebase.database.DatabaseException: Found a conflicting setters with name: setGregorianChange (conflicts with setGregorianChange defined on java.util.GregorianCalendar)
at com.google.android.gms.internal.zzbqi$zza.<init>(Unknown Source)
at com.google.android.gms.internal.zzbqi.zzi(Unknown Source)
at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
at com.google.android.gms.internal.zzbqi.zzaw(Unknown Source)
at com.google.firebase.database.DatabaseReference.zza(Unknown Source)
at com.google.firebase.database.DatabaseReference.setValue(Unknown Source)
在我尝试保存包含FirebaseDatabase中的日历的对象后发生此崩溃。
问题是,现在,即使我从此对象中删除了日历,该应用程序也会因同样的错误而崩溃。 看起来某些东西已被破坏,我无法让它再次运作。
我已从手机中卸载该应用,清除Firebase控制台中的数据库但未解决此问题。
你们其中一个人可以帮助我吗?
-----编辑-----
我做了一些新的测试,实际上只有当我在.setValue(...)
传递的类包含此方法时,应用程序才会崩溃:
public Calendar getStartTimeCalendar() {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(startTime);
return calendar;
}
答案 0 :(得分:4)
我找到了答案(在你的帮助下Deepesh)。
我要在FirebaseDatabase中保存的类包含以下变量:
public long startTime;
public long endTime;
当我使用这种方法时应用程序崩溃(可能是因为Firebase认为他们是吸气剂):
public Calendar getStartTimeCalendar() {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(startTime);
return calendar;
}
public Calendar getEndTimeCalendar() {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(endTime);
return calendar;
}
解决方案是通过@Exclude
答案 1 :(得分:0)
Firebase数据库是一个JSON数据库,这意味着它本身只能存储JSON类型。如果您尝试存储任何其他类型的信息,则必须在该类型和基础JSON类型之间进行转换,这一过程称为序列化/反序列化数据。
内置于Firebase Database SDK for Android中的Java-to-JSON序列化/反序列化可以序列化/反序列化所有支持的JSON类型和可以处理由这些类型组成的简单Java对象。它不能(也不意味着)处理Android或Java SDK中大多数预先存在的类,例如java.util.GregorianCalendar
。
如果您想在Firebase数据库中存储日期,则必须提出自己的存储方式。对于日期,这通常归结为以下方式之一:
如何实现这些,取决于你如何获得GregorianCalendar
。
答案 2 :(得分:0)
即使没有可以与
对应的字段,IgnoreExtraProperties注释也不起作用