如何在firebase中为同一个密钥保存两个数据类型?

时间:2017-09-15 08:46:31

标签: android firebase-realtime-database user-defined-data-types

我正在尝试使用firebase在我的应用中添加上次看到的功能。因此,我尝试使用mTimeStamp方法使用ServerValue.TIMESTAMP更新用户的时间戳(每个用户都有onDisconnect()键)值,如果用户上线,我正在尝试更新用户的{引用mTimeStamp上的ValueEventListener {1}}。因此,在一种情况下,更新的值是.info/connected(我在某处读过,当它从Firebase数据库中检索回来时返回为Map<String,String>原语),在一种情况下,它保存为{{1} }}

long

现在我正在尝试使用boolean方法从firebase中检索数据,现在public class PublicUserProfile { private int mAge,mSM; private double mPR; private Long mTimeStamp; private Boolean mIsOnline; public PublicUserProfile(){} public PublicUserProfile(int mAge, int mSM, double mPR, Long mTimeStamp) { Log.e("chimap","chad"); this.mAge = mAge; this.mSM = mSM; this.mPR = mPR; this.mTimeStamp = mTimeStamp; } public PublicUserProfile(int mAge, int mSM, double mPR, Boolean mIsOnline) { Log.e("idhar aye","4 wale"); this.mAge = mAge; this.mSM = mSM; this.mPR = mPR; this.mIsOnline = mIsOnline; } public PublicUserProfile(int mAge, int mSM, double mPR) { Log.e("idhar aye","3 wale"); this.mAge = mAge; this.mSM = mSM; this.mPR = mPR; } public int getmAge() { return mAge; } public int getmSM() { return mSM; } public double getmPR() { return mPR; } public Long getmTimeStamp() { return mTimeStamp; } public Boolean getmIsOnline() { return mIsOnline; } } 只能在DataSnapshot.getValue(<T> class)类中保存为long或boolean {我正在获取{ {1}}错误,类mTimeStamp无法转换为PublicUserProfile

要解决此错误,我在DatabaseException java.lang.Long中创建了一个额外字段,以便在值为myPackagename.PublicUserProfile而不是PublicUserProfile时调用第二个构造函数,但我又是得到mIsOnline对象无法转换为Boolean的{​​{1}}错误,即使在我查看数据库'mTimeStamp'的同时设置为Long但是我觉得这个错误是合理的,因为在数据库和模型类中,密钥和字段名称的名称应该分别相同。此方法也存在问题,因为即使我尝试在数据库中保存两个密钥,一个用于DatabaseException(用于保存时间戳(java.lang.Long)),另一个用于PublicUserProfile(用于保存天气人员)是否在线(true)),因为当我调用long方法时,我只能执行一项操作,即在数据库中删除mTimeStampbooleanmIsOnline

还有一个问题与保存两个密钥有关,即我想要检索10个onDisconnect()并且我想在mIsOnline中按顺序显示它们,以便首先显示在线人员然后最近的离线用户和Firebase仅提供一种setValue方法,因此我只能使用一个密钥mTimeStampPublicUserProfile

我应如何制作RecyclerView或如何拨打数据库以在我的应用中添加状态系统?

0 个答案:

没有答案