Моя задача - перенести текущую архитектуру нашего приложения (с использованием Cupboard) в Room, и я сталкиваюсь с некоторыми проблемами в самой первой части работы, которая заключается в переносе объектов базы данных, записанных в Java на данный момент (Cupboard поддерживает только Java), чтобы они работали с Room. Это пример:
public class ItemDb {
public Long _id;
public String type;
public String subtype;
public long scheduledTime;
public int iteration;
public String data1;
public String data2;
public String data3;
и вот как это выглядит в базе данных:
То, что я сделано с этим entity создает класс @Entity
в Kotlin для использования в Room, и это выглядит так:
@Entity(tableName = "ItemDb")
data class ItemDb(
@PrimaryKey(autoGenerate = true)
val _id: Long? = 0,
val type: String,
val subtype: String,
val scheduledTime: Long,
val iteration: Int,
val data1: String? = null,
val data2: String? = null,
val data3: String? = null
)
Всякий раз, когда я пытаюсь запросить базу данных, я получаю это исключение:
Предварительно упакованная база данных имеет недопустимую схему: ItemDb (com.example.room.model.items.ItemDb). Ожидается: TableInfo {name = 'ItemDb', columns = {duledTime = Column {name ='duledTime ', type =' INTEGER ', affinity =' 3 ', notNull = true, primaryKeyPosition = 0, defaultValue =' null '}, подтип = столбец {name = 'subtype', type = 'TEXT', affinity = '2', notNull = true, primaryKeyPosition = 0, defaultValue = 'null'}, data3 = Column {name = 'data3', type = ' ТЕКСТ ', affinity =' 2 ', notNull = false, primaryKeyPosition = 0, defaultValue =' null '}, data2 = Column {name =' data2 ', type =' TEXT ', affinity =' 2 ', notNull = false, primaryKeyPosition = 0, defaultValue = 'null'}, data1 = Column {name = 'data1', type = 'TEXT', affinity = '2', notNull = false, primaryKeyPosition = 0, defaultValue = 'null'}, итерация = Столбец {name = 'итерация', type = 'INTEGER', affinity = '3', notNull = true, primaryKeyPosition = 0, defaultValue = 'null'}, _id = Column {name = '_ id', type = 'INTEGER' , affinity = '3', notNull = false, primaryKeyPosition = 1, defaultValue = 'null'}, type = Column {name = 'type', type = 'TEXT', affinity = '2', notNull = true, primaryKeyPosition = 0, defaultValue = 'null'}}, foreignKeys = [], индексы = []} Найдено: TableInfo {name = 'ItemDb', columns = {duledTime = Column {name ='duledTime ', type =' INTEGER ', affinity =' 3 ', notNull = false, primaryKeyPosition = 0, defaultValue =' null '}, subtype = Column {name =' subtype ', type =' TEXT ', affinity =' 2 ', notNull = false, primaryKeyPosition = 0, defaultValue =' null '}, data3 = Column {name =' data3 ', type = 'TEXT', affinity = '2', notNull = false, primaryKeyPosition = 0, defaultValue = 'null'}, data2 = Column {name = 'data2', type = 'TEXT', affinity = '2', notNull = false, primaryKeyPosition = 0, defaultValue = 'null'}, data1 = Column {name = 'data1', type = 'TEXT', affinity = '2', notNull = false, primaryKeyPosition = 0, defaultValue = 'null'} , iteration = Column {name = 'iteration', type = 'INTEGER', affinity = '3', notNull = false, primaryKeyPosition = 0, defaultValue = 'null'}, _id = Column {name = '_ id', type = 'integer', affinity = '3', notNull = false, primaryKeyPosition = 1, defaultValue = 'null'}, type = Column {name = 'type', type = 'TEXT', affinity = '2', notNull = false , primaryKeyPosition = 0, defaultValue = 'null'}}, foreignKeys = [], ind ices = []}
Сравнивая два, я вижу, что некоторые поля должны быть помечены notNull
, но они, кажется, помечены nullable
вместо , хотя класс Kotlin объявляет поля как notNull
, избегая использования обнуляемых ?
.
Что я делаю не так? Если вам нужна дополнительная информация об архитектуре базы данных, я могу легко их предоставить. Спасибо!