Ошибка создания новой таблицы в базе данных Room - PullRequest
0 голосов
/ 28 января 2020

Я создаю новую таблицу в Room, но у меня ошибка с миграцией. Проблема в favId, есть разница между тем, что ожидается (primaryKeyPosition = 1) и тем, что найдено в (primaryKeyPosition = 0). Если я удаляю данные, все работает нормально.

java .lang.IllegalStateException: Миграция не обрабатывается должным образом: FavoritesRetailer (com.tiendeo.core.data.model.local.favorite.FavoriteRetailerLocalEntity ). Ожидается: TableInfo {name = 'FavoritesRetailer', столбцы = {lon = Column {name = 'lon', type = 'REAL', affinity = '4', notNull = true, primaryKeyPosition = 0, defaultValue = 'null'}, retailerId = Column {name = 'retailerId', type = 'TEXT', affinity = '2', notNull = true, primaryKeyPosition = 0, defaultValue = 'null'}, countryCode = Column {name = 'countryCode', type = ' TEXT ', affinity =' 2 ', notNull = true, primaryKeyPosition = 0, defaultValue =' null '}, FavoritesId = столбец {name =' FavoritesId ', type =' TEXT ', affinity =' 2 ', notNull = true, primaryKeyPosition = 1, defaultValue = 'null'}, город = столбец {name = 'city', тип = 'TEXT', affinity = '2', notNull = false, primaryKeyPosition = 0, defaultValue = 'null'}, retailerName = Столбец {name = 'retailerName', type = 'TEXT', affinity = '2', notNull = true, primaryKeyPosition = 0, defaultValue = 'null'}, type = Column {name = 'type', type = 'INTEGER' , affinity = '3', notNull = true, primaryKeyPosition = 0, defaultValue = 'null'}, lat = столбец {name = 'lat', тип = 'REAL', affinity = '4', notNull = true, primaryKeyPosition = 0, defaultValue = 'null'}}, foreignKeys = [], indices = []} Найдено: TableInfo {name = 'FavoritesRetailer', столбцы = {lon = Столбец {name = 'lon', тип = 'REAL', сходство = '4', notNull = true, primaryKeyPosition = 0, defaultValue = 'null'}, retailerId = Column {name = 'retailerId', type = 'TEXT', affinity = '2', notNull = true, primaryKeyPosition = 0, defaultValue = 'null'}, countryCode = Column { name = 'countryCode', type = 'TEXT', affinity = '2', notNull = true, primaryKeyPosition = 0, defaultValue = 'null'}, FavoritesId = Column {name = 'FavoritesId', type = 'TEXT', affinity = '2', notNull = true, primaryKeyPosition = 0, defaultValue = 'null'}, city = столбец {name = 'city', тип = 'TEXT', affinity = '2', notNull = false, primaryKeyPosition = 0, defaultValue = 'null'}, retailerName = Column {name = 'retailerName', type = 'TEXT', affinity = '2', notNull = true, primaryKeyPosition = 0, defaultValue = 'null'}, type = Column {name = 'type', type = 'INTEGER', affinity = '3', notNull = true, primaryKeyPosition = 0, defaultValue = 'null'}, lat = столбец {name = 'lat', type = 'REAL', affinity = ' 4 ', notNull = true, primaryKeyPosition = 0, defaultValue =' null '} }, foreignKeys = [], indices = []}

Это моя модель и миграция

@Entity(tableName = "favoriteRetailer")
class FavoriteRetailerLocalEntity(
    @PrimaryKey var favoriteId: String,
    var city: String?,
    var lat: Float,
    var lon: Float,
    var retailerName: String,
    var retailerId: String,
    var countryCode: String,
    var type: Int
val TIENDEO_DB_MIGRATION_4_5: Migration = object : Migration(4, 5) {
  override fun migrate(database: SupportSQLiteDatabase) {
    try{
      database.execSQL(
          "CREATE TABLE IF NOT EXISTS 'favoriteRetailer' ('favoriteId' TEXT NOT NULL, 'city' TEXT,  'lat' REAL NOT NULL, 'lon' REAL NOT NULL, 'retailerName' TEXT NOT NULL, 'retailerId' TEXT NOT NULL, 'countryCode' TEXT NOT NULL, 'type' INTEGER NOT NULL)"
      )
    } catch (e: java.lang.RuntimeException) {
      Log.i("Error", "error: $e. Problem with migration 4_5")
    }
  }
}

Ответы [ 2 ]

0 голосов
/ 24 апреля 2020

Я нашел решение. Проблема была в определении табл. Я должен был поставить PRIMARY KEY('id') в таблицу создания

0 голосов
/ 28 января 2020

Проблема связана с вашим классом модели.

    @Entity(tableName = "favoriteRetailer")
class FavoriteRetailerLocalEntity(
    @PrimaryKey var favoriteId: String,
    var city: String?,
    var lat: Float,
    var lon: Float,
    var retailerName: String,
    var retailerId: String,
    var countryCode: String,
    var type: Int

город обнуляется, но Room ожидает, что он не будет нулевым. Поэтому измените его следующим образом

 @Entity(tableName = "favoriteRetailer")
    class FavoriteRetailerLocalEntity(
        @PrimaryKey var favoriteId: String,
        var city: String,
        var lat: Float,
        var lon: Float,
        var retailerName: String,
        var retailerId: String,
        var countryCode: String,
        var type: Int
...