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结构如下: 从Firebase面板控件中截取的屏幕截图

然后我尝试打印我的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对象。 您可以从错误消息中看到,它正在尝试为在multiplayerfind的推送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() } }