我创建了一个对象来将一些数据发送到 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 是使用变量名发送的。我想对 Useraname
和 Email
之类的键进行编码,就像 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;
}
}
如图所示,它根据变量名保存键。我从一个字段的注释中更改了属性名称,当我保存它时,它会忽略它,但是当我更改变量名称时,它会另存为新条目,其中包含该新变量名称的键。
在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/