我有一个具有以下结构的模型
public class OfferModel { private String mImageUrl; private String mOfferCode; private String mOfferTitle; private String mOfferDescription; private boolean mIsRunning; private String mCreatorUid; private Date mStartDate; }
保存时其他一切都很好。它将另存为Firebase Realtime数据库
startDate date: 22 day: 3 hours: 23 minutes: 20 month: 5 seconds: 50 time: 1466617850476 timezoneOffset: -330 year: 116
但是当我尝试检索它时,日期给出了以下错误-
java.lang.ClassCastException: java.util.HashMap cannot be cast to java.util.Date at com.localvine.models.OfferModel.<init>(OfferModel.java:37) at com.localvine.managers.OfferManager$1.onDataChange(OfferManager.java:62) at com.google.android.gms.internal.zzafp.zza(Unknown Source) at com.google.android.gms.internal.zzagp.zzSu(Unknown Source) at com.google.android.gms.internal.zzags$1.run(Unknown Source) at android.os.Handler.handleCallback(Handler.java:615)
我知道Firebase不支持Java Date对象,但是由于它将它们保存在地图中,如何从该地图中获取日期?在Firebase Android中,是否有任何适当的保存和检索日期的方法?
您可以将日期存储为纪元日期。您可以花很长的时间System.currentTimeMillis();来使用系统时间或将Firebase服务器时间与其一起使用ServerValue.TIMESTAMP。第一个选项的作用是随时区和系统设置而变化。因此,如果将日期存储很长,则只需将OfferModel字段更改mStartDate为a long,然后在检索对象时使用new Date(long)来获取相应Date的日期。
System.currentTimeMillis();
ServerValue.TIMESTAMP
OfferModel
mStartDate
long
new Date(long)
Date