Как я могу использовать комнату Android, чтобы создать сущность с несколькими или вложенными списками? - PullRequest
0 голосов
/ 14 июня 2019

Я использую Room для хранения некоторых данных. но JSON немного сложнее. Как я могу использовать Room для этого?

Это мой JSON:

{
  "pagination" : {
    "total" : 50,
    "limit" : 30,
    "page" : 1
  },
  "list" : [
    {
      "guid" : "123",
      "data" : {
        "light" : 240,
        "snoring" : 5,
        "talking" : [
          {
            "time" : 1556437167,
            "file" : "file/file.file"
          }
        ],
        "turnover" : 14,
        "temp" : "25.5",
        "duration" : 480,
        "hum" : "78.6",
        "sleep" : [
          {
            "stage" : 1,
            "time" : 1556437167
          }
        ],
        "deep" : 180
      },
      "date" : 1556437167
    }
  ]
}

Как мне использовать @ Relation, @ Embedded и прочее для хранения / преобразования этого json в Entity Room?

Ответы [ 2 ]

0 голосов
/ 14 июня 2019

Я думаю, вы можете сделать что-то подобное.

@Entity
data class List(
    val date: Int,
    val guid: String,
    @Embedded val data: Data
) {
    @PrimaryKey(autoGenerate = true)
    var id: Int? = null
}

@Entity
data class Data(
    val deep: Int,
    val duration: Int,
    val hum: String,
    val light: Int,
    val snoring: Int,
    val temp: String,
    val turnover: Int
){
    @PrimaryKey(autoGenerate = true)
    var id: Int? = null
}
@Entity(
    foreignKeys = [
        ForeignKey(
            entity = Data::class,
            parentColumns = arrayOf("id"),
            childColumns = arrayOf("data_id")
            )
    ]
)
data class Talking(
    val `file`: String,
    val time: Int,
    val data_id: Int
){
    @PrimaryKey(autoGenerate = true)
    var id: Int? = null
}

@Entity(
    foreignKeys = [
        ForeignKey(
            entity = Data::class,
            parentColumns = arrayOf("id"),
            childColumns = arrayOf("data_id")
        )
    ]
)
data class Sleep(
    val stage: Int,
    val time: Int,
    val data_id: Int
){
    @PrimaryKey(autoGenerate = true)
    var id: Int? = null
}

У вас есть список объектов, и эти объекты являются вашими фактическими данными, которые вам, возможно, понадобится сохранить при использовании комнаты.

Итак, внутри вашего списка есть 3 элемента "guid", "data "," date "

Кроме данных, могут быть сохранены другие два значения" guide "и" date ", поскольку они относятся к типу данных примитива. Для данных вам нужен другой класс. А для Talking и Sleep вам нужны другие классы.

0 голосов
/ 14 июня 2019
public class Coordinates {
       double latitude;
       double longitude;
}
public class Address {
     String street;
     @Embedded
     Coordinates coordinates;
}

Если вы хотите добавить префикс в имя столбца, используйте

@Embedded(prefix = "foo_")
Coordinates coordinates;

Обновление

public class Foo{
 List<Object> objects;
}

@Embedded
List<Foo> foos
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...