Firebase对象没有setter/getter方法。

3

这是我的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。数据库结构如下:

从 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类中找不到-KqV44f4FUxV8ZDuqL4Y的setter/field。

08-01 19:14:38.816 19548-19548/app.simone W/ClassMapper: 在app.simone.multiplayer.model.OnlineMatch类中找不到-KqV3sAPXPcYrtr61cDy的setter/field。

08-01 19:14:38.816 19548-19548/app.simone W/ClassMapper: 在app.simone.multiplayer.model.OnlineMatch类中找不到-KqV2BGH7Z-Y9RxnPGpt的setter/field。

2个回答

1
您的代码正在请求 multiplayer 下的 所有内容,其中包括您之前推送的所有 OnlineMatch 对象。从错误消息中可以看出,它正在尝试找到一个设置器或字段,用于刚刚在 multiplayer 下找到的 push ID -KqV44f4FUxV8ZDuqL4Y。如果您想获取单个 OnlineMatch 对象,则需要深入挖掘 multiplayer 下的 push IDs 中的对象。因此,这应该会给您一些东西:
dataSnapshot.child("multiplayer/-KqV44f4FUxV8ZDuqL4Y").getValue(OnlineMatch::class.java)

无论如何,您需要拥有所需的推送ID,或者从快照的子项中发现它们,并从该子项构建新的快照。

谢谢你的帮助,Doug,但我还是有问题。显然,我不能获取每个推送 ID,因为它们是由 Firebase 自动生成的。我只需要以同样的方式获取 OnlineMatch 数组,就像我将它们上传到 Firebase 一样。这是我用于在 Firebase 数据库上载入它们的代码:code fun createMatch(match: OnlineMatch) { var database = FirebaseDatabase.getInstance().getReference("multiplayer") val matchList = database.push() matchList.setValue(match) } - Giacomo Bartoli

0
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()
            }

        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接