首先我要说的是,我对使用Firebase非常陌生。
我正在尝试使用名为" mGameSessionID"的字符串来推送自定义对象。使用push():
到我的Firebase数据库DatabaseReference pushedPostRef =
myRef.child(myRef.push().getKey());
String gameSessionID = pushedPostRef.getKey();
GameSession gameSession = new GameSession(gameSessionID);
pushedPostRef.setValue(gameSession);
但是使用" .setValue(gameSession)"设置值时它为数据库添加了额外的gameSessionID值
这是GameSession类:
String mGameSessionID;
GameSession()
{
}
GameSession(String gameSessionID)
{
mGameSessionID = gameSessionID;
}
public String getGameSessionID()
{
return mGameSessionID;
}
public void setGameSessionID(String gameSessionID)
{
mGameSessionID = gameSessionID;
}
答案 0 :(得分:1)
Firebase实时数据库SDK将使用反射序列化对象实例上的所有可见字段和JavaBean类型的getter方法以发现它们。因此,如果它看到一个字段" foo",它将序列化一个名为" foo"的属性。如果它看到名为" getFoo"的getter方法,它将序列化一个名为" foo"的属性。
对于像GameSession这样的JavaBean类型对象,带有访问者(getter和setter)的字段应该是私有的,只允许访问它们:
private String mGameSessionID
这可以防止SDK看到mGameSessionId
,而只是使用可见的getter方法。