的火力地堡没有setter /吸气对象

问题描述:

这是我的Java类:的火力地堡没有setter /吸气对象

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; 
} 

}

我可以正确地创建对象,并上传到火力地堡。数据库结构如下: Screenshot taken from firebase panel control

然后我尝试打印我的OnlineMatch对象的值(科特林代码):

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否设定器/场

08-01 19:14:38.816 19548-19548/app.simone W/ClassMapper:没有设置器14:38.816 19548-19548/app.simone W/ClassMapper:上类app.simone.multiplayer.model.OnlineMatch

08-01 19找到-KqV3sAPXPcYrtr61cDy /字段没有setter /字段-KqV2BGH7Z-Y9RxnPGpt发现阶级app.simone.multiplayer.model.OnlineMatch

您的代码是要求一切multiplayer下,包括所有OnlineMatch的对象,你推有以前。您可以从错误消息中看到它正试图找到一个setter或字段,用于推送ID -KqV44f4FUxV8ZDuqL4Y,它刚好在multiplayer之下找到。如果您想获取单个OnlineMatch对象,则必须深入挖掘在multiplayer下推送ID。因此,这应该给你的东西:

dataSnapshot.child("multiplayer/-KqV44f4FUxV8ZDuqL4Y").getValue(OnlineMatch::class.java) 

在任何情况下,你需要有您所选择的推号,或者从快照的孩子发现他们,并建立从孩子一个新的快照。

+0

谢谢你帮道格,但我还是遇到了麻烦。当然,我不能拥有每个推送ID,因为它们是由Firebase自动生成的。我只需要获取一个OnlineMatch数组,就像我将它们上传到Firebase一样。这是我用来将它们上传到Firebase数据库的代码:'code fun createMatch(match:OnlineMatch)var database = FirebaseDatabase.getInstance()。getReference(“multiplayer”) val matchList = database.push() matchList .setValue(match) }' –

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

     }