Firebase对象没有setter / getter
这是我的Java类:
public class OnlineMatch{ private FacebookUser firstplayer; private FacebookUser secondplayer; public OnlineMatch(){ } public OnlineMatch(FacebookUser firstplayer, FacebookUser secondplayer) { this.firstplayer = firstplayer; this.secondplayer = secondplayer; } public FacebookUser getFirstplayer() { return firstplayer; } public void setFirstplayer(FacebookUser firstplayer) { this.firstplayer = firstplayer; } public FacebookUser getSecondplayer() { return secondplayer; } public void setSecondplayer(FacebookUser secondplayer) { this.secondplayer = secondplayer; }
}
我可以正确创建对象并上传到Firebase。 db结构如下:
然后我尝试打印我的OnlineMatch对象(Kotlin代码)的值:
val match = dataSnapshot.child("multiplayer").getValue(OnlineMatch::class.java) if(match!=null){ System.out.println(match) }
在这里,我在Android Studio控制台上得到这个输出:
9548-19548 / app.simone W / ClassMapper:在类app.simone.multiplayer.model.OnlineMatch上find-KqV44f4FUxV8ZDuqL4Y没有设置器/字段
08-01 19:14:38.816 19548-19548 / app.simone W / ClassMapper:在类app.simone.multiplayer.model.OnlineMatch上find-KqV3sAPXPcYrtr61cDy没有设置器/字段
08-01 19:14:38.816 19548-19548 / app.simone W / ClassMapper:在类app.simone.multiplayer.model.OnlineMatch上find-KqV2BGH7Z-Y9RxnPGpt没有设置器/字段
你的代码是要求在multiplayer
下的所有东西 ,其中包括你之前推送过的所有OnlineMatch对象。 您可以从错误消息中看到,它正在尝试为在multiplayer
find的推送ID -KqV44f4FUxV8ZDuqL4Y
查找setter或字段。如果您想获取单个OnlineMatch对象,则必须深入挖掘对象multiplayer
下的推送ID。 所以这应该给你一些东西:
dataSnapshot.child("multiplayer/-KqV44f4FUxV8ZDuqL4Y").getValue(OnlineMatch::class.java)
无论如何,您需要拥有您选择的推送ID,或者从快照的子项中发现它们,并从该子项创建新的快照。
Doug Stevenson,你的回答对我有用。 我创建了一个字符串数组,我保存了这个键,然后遍历每个特定键的孩子:
override fun onDataChange(dataSnapshot: DataSnapshot) { // Get Post object and use the values to update the UI val match = dataSnapshot.children var keysArray = KeysHandler() if(match!=null){ // saving keys into an array for (data in match){ keysArray.addToList(data.key) } // saving an OnlineMatch object into another array repeat(keysArray.list.size){ i-> val onlineMatch = dataSnapshot.child(keysArray.getElement(i)).getValue(OnlineMatch::class.java)!! requestsUsers.add(onlineMatch) } // updating GUI updateRequests() } }
- Kotlin:不能使用GenericTypeIndicator调用Firebase数据库的getValue
- 如何使用Kotlin从Firebase数据库检索数据?
- Firebase @PropertyName不起作用
- Android的Firebase身份验证同步登录
- 在android中加载页面加载firebase数据
- Kotlin中的Firebase SDK – onChildChanged不会触发列表中的第一个子项
- 如何在Kotlin上使用Firebase UI数据库?
- Firebase Android – 在Kotlin中使用电子邮件和密码创建用户
- 如何更改Kotlin属性的名称以匹配Firebase数据库上的字段