android - Firebase 序列化名称

标签 android firebase firebase-realtime-database

我创建了一个对象来将一些数据发送到 firebase。作为示例,我使用 firebase 用户示例:

public class User {
    public String username;
    public String email;

    public User() {
        // Default constructor required for calls to DataSnapshot.getValue(User.class)
    }

    public User(String username, String email) {
        this.username = username;
        this.email = email;
    }
}

我想对发送到 firebase 的属性名称进行编码。目前 key 是使用变量名发送的。我想对 UseranameEmail 之类的键进行编码,就像 Gson 正在做的那样。我不想更改变量名。

@SerializateName("Username")
public String username;
@SerializateName("Username")
public String email;

我使用了 @SerializateName(),但没有用。与 Firebse 使用的 @PropertyName 相同,它不起作用。我可以使用什么来序列化自定义 key ?

更新 1

public class Pojo {
    @PropertyName("Guid")
    public String guid;

   @PropertyName("Name")
   public String name;

   public String getPojoGuid() {
       return guid;
   }

   public void setPojoGuid(String guid) {
       this.guid = guid;
   }
}

如图所示,它根据变量名保存键。我从一个字段的注释中更改了属性名称,当我保存它时,它会忽略它,但是当我更改变量名称时,它会另存为新条目,其中包含该新变量名称的键。

enter image description here

this文档是一种方法toMap()。如果我喜欢,可以工作(对我来说不方便),但不能使用 @PropertyName

更新 2

如果我用 @Exclude 标记 getter 和 setter 并且用 @IgnoreExtraProperties 标记类正在工作。我不必使用文档中的 toMap() 方法示例。正在使用 @PropertyName 中的指定名称。在我看来这不是一件好事,造成困惑。

最佳答案

每当获取或设置其值时,Firebase SDK 都会使用为该属性找到的注释。这意味着您需要考虑 Firebase 如何获取/设置该值,并对它看起来的每个地方进行注释。

由于您要声明一个 getter 方法,Firebase 将使用它来获取属性的值。它将使用该字段来设置值。所以注释需要在两者上:

public class Pojo {
   @PropertyName("Guid")
   public String guid;

   @PropertyName("Name")
   public String name;

   @PropertyName("Guid")
   public String getPojoGuid() {
       return guid;
   }

   @PropertyName("Guid")
   public void setPojoGuid(String guid) {
       this.guid = guid;
   }
}

如果你有 getters 和 setters,注释需要在那些上,但不再在字段上:

public class Pojo {
   private String guid;
   private String name;

   @PropertyName("Guid")
   public String getPojoGuid() {
       return guid;
   }

   @PropertyName("Guid")
   public void setPojoGuid(String value) {
       guid = value;
   }

   @PropertyName("Name")
   public void setPojoGuid(String guid) {
       this.guid = guid;
   }

   @PropertyName("Name")
   public void setPojoGuid(String value) {
       name = value;
   }
}

关于android - Firebase 序列化名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45306168/

相关文章:

android - Gradle SwingBuilder: “Toolkit not found: apple.awt.CToolkit”错误

android - 使用 Firebase 动态链接的电子邮件 Activity

android - 在 Android 的应用程序中播放 YouTube 视频

Android:addView 和布局方法不能一起工作

javascript - switchMap 返回一项

swift - Firebase 数据检索 - 编辑注释

ios - 没有这样的模块 'FIRStorageMetadata'

java - 将未经身份验证的用户上传的图像/gif 链接到同一用户的文本帖子

ios - Firebase 获取 child ID swift ios

ios - 从 JSON 数据 block 中访问 URL 和数组