使用DocumentReference.set(object)
时,会更改布尔字段。带'的字段是'前缀变为普通字段值
class Invitation {
private boolean isRequested;
private boolean isValid;
private boolean isAccepted;
private String lastName,firstName;
private long sentOn;
}
当我使用set()
方法将此对象推送到数据库时,布尔值以这种方式更改:
答案 0 :(得分:2)
这是一种自动翻译,因此可以将getter命名为isBoolean
而不是getBoolean
。
在Android中,您可以使用@PropertyName
annotation重命名属性,这样您就可以指定一个不同的名称(在本例中为确切名称),Firebase应该按原样使用:
class Invitation {
private boolean isRequested;
@PropertyName(value="isRequested")
public boolean isRequested() {
return this.isRequested;
}
@PropertyName(value="isRequested")
public void setRequested(boolean value) {
this.isRequested = value;
}
// ...
}
但是,我建议在字段名称上删除is
前缀,而只将其用于getter,例如:
public boolean isRequested() {
return this.requested;
}
答案 1 :(得分:1)
我们遇到了这个问题,我们就这样解决了。
boolean isPrimary;
public boolean getIsPrimary() {
return this.isPrimary;
}
public void setIsPrimary(boolean isPrimary) {
this.isPrimary = isPrimary;
}
我知道这很奇怪。似乎Firestore使用'getter'方法来设置对象, 因为我第一次改变'setter'方法并没有发生任何事情。我改变了'getter'方法,它最终正常工作。
我希望他们能解决这个问题。因为在Android中没有人使用布尔的'getter'方法作为'getIsSomething'。
答案 2 :(得分:0)
在 Kotlin 中,使用 @field:JvmField
。例如,
data class User(
@field:JvmField
val isEnrolled: Boolean = false
)