【问题标题】:Android/Java Firebase adding unexpected value to key/referenceAndroid/Java Firebase 向键/引用添加意外值
【发布时间】:2017-11-13 20:29:28
【问题描述】:

首先让我说我对使用 Firebase 非常陌生。

我正在尝试使用 push() 将带有名为“mGameSessionID”的字符串的自定义对象推送到我的 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;
}

【问题讨论】:

    标签: java android firebase firebase-realtime-database


    【解决方案1】:

    Firebase 实时数据库 SDK 将序列化对象实例上的所有可见字段和 JavaBean 类型的 getter 方法,使用反射来发现它们。因此,如果它看到一个字段“foo”,它将序列化一个名为“foo”的属性。如果它看到一个名为“getFoo”的getter方法,它将序列化一个也称为“foo”的属性。

    对于像 GameSession 这样的 JavaBean 类型对象,带有访问器(getter 和 setter)的字段应该是私有的,只能通过它们进行访问:

    private String mGameSessionID
    

    这应该会阻止 SDK 看到 mGameSessionId,而只使用可见的 getter 方法。

    【讨论】:

    • 啊,我明白了,谢谢你的澄清。有时我忘记了我没有声明私有或公开的东西!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-18
    • 1970-01-01
    • 2016-12-10
    相关资源
    最近更新 更多