android 如何使用Proto DataStore保存对象列表

dgtucam1  于 2023-05-21  发布在  Android
关注(0)|答案(2)|浏览(206)

如果我有下面的类,我如何用Proto DataStore保存它的列表?

data class Tag(
    val id: int,
    val name: String
)

我看到的所有指南都在教如何只保存一个对象。有没有可能列出一份清单?

bfnvny8b

bfnvny8b1#

你应该考虑在Room中存储内容列表,即使是proto-datastore也不是存储复杂内容的合适解决方案,
如果你还想那么,我会建议你限制的数据存储到10-15项
到代码--->
1.创建你的proto文件,重复的是用来创建list类型的Java

message Student {
  string id = 1;
  string name = 2;
}

message ClassRoom {
  string teacher = 1;
  repeated Student students  = 2; // repeated => list
}

1.在你的原型商店里

dataStore.updateData { store ->
       store.toBuilder()
      .clearStudents() // clear previous list
      .setAllStudents(students)// add the new list
      .build()
}

如果你想要示例 checkout 我的示例应用程序,请阅读数据/域层https://github.com/ch8n/Jetpack-compose-thatsMine

raogr8fs

raogr8fs2#

您可以在kotlinxjson库的帮助下将类对象编码为json字符串,并将该字符串存储到datastore首选项中,如下所示->

@Serializable
data class EmployeeCorporateInfo(
    @SerialName("companyName")
    val companyName: String,
    @SerialName("employeeInfo")
    val employeeInfo: EmployeeInfo,
    @SerialName("firstName")
    val firstName: String,
    @SerialName("id")
    val id: String,
    @SerialName("lastName")
    val lastName: String,
    @SerialName("middleName")
    val middleName: String
)

@Serializable
data class EmployeeCorporates(val corporates:List<EmployeeCorporateInfo>)

编码为JSON:

val employeeCorporates = EmployeeCorporates(emptyList()) 
val rawCorporate:String = Json.encodeToString(employeeCorporates ))

rawCorporate存储到首选项数据存储中。之后,无论何时你需要,从首选项数据存储中获取并将该字符串解码为我们的类对象。

val employeeCorporates = Json.decodeFromString<EmployeeCorporate(rawCorporate)

相关问题