DocumentReference.set(Object o)更改布尔字段名称

时间:2017-11-14 09:31:56

标签: android firebase google-cloud-firestore

使用DocumentReference.set(object)时,会更改布尔字段。带'的字段是'前缀变为普通字段值

class Invitation {
    private boolean isRequested;
    private boolean isValid;
    private boolean isAccepted;
    private String lastName,firstName;
    private long sentOn;
}

当我使用set()方法将此对象推送到数据库时,布尔值以这种方式更改:

Firestore screenshot

3 个答案:

答案 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
)