java - Android/Java Firebase 向键/引用添加意外值

标签 java android firebase firebase-realtime-database

首先我要说的是,我对使用 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 值

Example picture of what the firebase looks like

这是 GameSession 类:

String mGameSessionID;

GameSession()
{

}

GameSession(String gameSessionID)
{
    mGameSessionID = gameSessionID;
}

public String getGameSessionID() 
{
    return mGameSessionID;
}

public void setGameSessionID(String gameSessionID) 
{
    mGameSessionID = gameSessionID;
}

最佳答案

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

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

private String mGameSessionID

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

关于java - Android/Java Firebase 向键/引用添加意外值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47254769/

相关文章:

java - HashMap#hash(int)方法的解释

android - 删除 OLDEST 提交的返回堆栈 fragment

android - com.android.volley.NoConnectionError - 带有 Charles Proxy 的 Android 模拟器

android - 当我滚动 gridview 时图像发生变化

swift - 应用待机 24 小时后未收到 Firebase 通知

java - 从本地 java 调用本地 php 脚本的最佳方式?

Java更新序列化文件的数据结构更改

Firebase 托管自定义域错误

android - 当应用程序在后台时,FCM 无法显示弹出窗口

java - 如何抓取随机视频在特定条件下播放