繁体   English   中英

Android Room和Kotlin布尔数组

[英]Android Room and Kotlin Boolean Array

我已经审查了很多与此相关的Stack答案,但仍然没有得到。 我有一个@Embedded类,但我宁愿这是一个包含三个元素的布尔数组。 有人可以用线索棒打我,并帮助我重新设计此实体以处理此问题或提供我需要的TypeConverter吗? 如果可以避免,我宁愿不使用JSON / GSON转换器。

data class Bools (val a: Boolean = true,
                  val b: Boolean = true,
                  val c: Boolean = false)

@Entity(tableName = "people_table")
data class Person (@ColumnInfo(name = "first_name") val firstName: String,
                   @ColumnInfo(name = "last_name") val lastName: String,
                   @Embedded
                   val bool: Bools
){
    @PrimaryKey(autoGenerate = true)
    var id: Int = 0
}

谢谢。

通常,我不建议将Room实体,改造响应和类似内容视为您的内存数据模型。 它们是数据传输对象,因为它们受到UI和应用内逻辑无需处理的限制。 在诸如Retrofit之类的情况下,服务器组织和传递数据的方式可能与您要如何在应用程序中处理数据的方式几乎没有相似之处。 在您的情况下,您需要三个不同的列,这意味着您可以在实体或@Embedded对象中使用三个不同的Kotlin属性。

一种典型的方法是使用PersonDTOPersonEntity或Room所使用的东西,然后将它们转换为具有所需结构的Person对象/从其转换为该对象:

data class Person (val firstName: String,
                   val lastName: String,
                   val boolsheet: BooleanArray)

@Entity(tableName = "people_table")
data class PersonEntity (@ColumnInfo(name = "first_name") val firstName: String,
                         @ColumnInfo(name = "last_name") val lastName: String,
                         val a: Boolean = true,
                         val b: Boolean = true,
                         val c: Boolean = false
){
    constructor(somebody: Person): this(
      somebody.firstName,
      somebody.lastName,
      somebody.boolsheet[0],
      somebody.boolsheet[1],
      somebody.boolsheet[2]
    )

    @PrimaryKey(autoGenerate = true)
    var id: Int = 0

    fun toPerson(): Person = Person(firstName, lastName, booleanArrayOf(a, b, c))
}

现在, Person及其相关的所有内容对Room一无所知,并且您拥有所需的API。 您的存储库将使用PersonEntity来隐藏详细信息。 而且,如果有一天您需要让存储库也与服务器通信,则存储库可以在Person和Web服务API所需的表示形式之间进行规范化。

如果您不喜欢它,请坚持使用Person@Embedded ,并在其中添加一个val boolsheet = booleanArrayOf(bools.a, bools.b, bools.c) ,以使Boolean值处于可迭代结构中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM