Nanda Z
Nanda Z

Reputation: 1876

Room Migration Query Failed when Create new Table

What is my room migration problem? anyone can see this?

java.lang.IllegalStateException: Migration didn't properly handle: news(com.ngerancang.cacheapipaging.model.News).

Expected: TableInfo{name='news', columns={alias=Column{name='alias', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, selected=Column{name='selected', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}, link=Column{name='link', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, guid=Column{name='guid', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, site=Column{name='site', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, date=Column{name='date', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=0, defaultValue='null'}, topic_url=Column{name='topic_url', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, section_url=Column{name='section_url', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, num_photo=Column{name='num_photo', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, section_guid=Column{name='section_guid', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, photo=Column{name='photo', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, content_type=Column{name='content_type', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, dateAgo=Column{name='dateAgo', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, thumb=Column{name='thumb', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, title=Column{name='title', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, data_source=Column{name='data_source', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, topic_guid=Column{name='topic_guid', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, id=Column{name='id', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='null'}, pubDate=Column{name='pubDate', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, youtube=Column{name='youtube', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, topic=Column{name='topic', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, section_title=Column{name='section_title', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}}, foreignKeys=[], indices=[]}

Found: TableInfo{name='news', columns={alias=Column{name='alias', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, selected=Column{name='selected', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}, link=Column{name='link', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, guid=Column{name='guid', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, site=Column{name='site', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, date=Column{name='date', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}, topic_url=Column{name='topic_url', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, section_url=Column{name='section_url', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, num_photo=Column{name='num_photo', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, section_guid=Column{name='section_guid', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, default 09-12 19:06:48.734 6165-6190/com.ngerancang.cacheapipaging E/eglCodecCommon: glUtilsParamSize: unknow param 0x00008cdf 09-12 19:06:48.735 6165-6190/com.ngerancang.cacheapipaging E/eglCodecCommon: glUtilsParamSize: unknow param 0x00008824

My model class looks like this

@Entity(tableName = "news")
data class News(
    @PrimaryKey(autoGenerate = true)
    var id : Int = 0,
    val alias: String?=null,
    @ColumnInfo(name = "content_type")
    @SerializedName("content_type")
    val contentType: String?=null,
    @ColumnInfo(name = "data_source")
    @SerializedName("data_source")
    val dataSource: String?=null,
    val date: Long?=null,
    val dateAgo: String?=null,
    val guid: String?=null,
    val link: String?=null,
    val photo: String?=null,
    val pubDate: String?=null,
    @ColumnInfo(name = "section_guid")
    @SerializedName("section_guid")
    val sectionGuid: String?=null,
    @ColumnInfo(name = "section_title")
    @SerializedName("section_title")
    val sectionTitle: String?=null,
    @ColumnInfo(name = "section_url")
    @SerializedName("section_url")
    val sectionUrl: String?=null,
    val site: String?=null,
    val thumb: String?=null,
    val title: String?=null,
    val topic: String?=null,
    @ColumnInfo(name = "topic_guid")
    @SerializedName("topic_guid")
    val topicGuid: String?=null,
    @ColumnInfo(name = "topic_url")
    @SerializedName("topic_url")
    val topicUrl: String?=null,
    val youtube: String?=null,
    @ColumnInfo(name = "num_photo")
    @SerializedName("num_photo")
    val numPhoto: String?=null,
    var selected: Boolean = false
)

My database abstract class

@Database(entities = [Recipe::class, News::class], version = 2, exportSchema = true)
@TypeConverters(Converters::class)
abstract class AppDatabase : RoomDatabase(){

    abstract fun recipeDao() : RecipeDao

    abstract fun newsDao() : NewsDao

    companion object{

        private val MIGRATION_1_2 : Migration = object : Migration(1, 2){
            override fun migrate(database: SupportSQLiteDatabase) {

                val sql = "CREATE TABLE IF NOT EXISTS `news` (`id` INTEGER NOT NULL, `alias` TEXT, `date` INTEGER NOT NULL, " +
                        "`guid` TEXT, `content_type` TEXT, `data_source` TEXT, `dateAgo` TEXT, `link` TEXT, `photo` TEXT, " +
                        "`pubDate` TEXT, `section_guid` TEXT, `section_title` TEXT, `section_url` TEXT, `site` TEXT, " +
                        "`thumb` TEXT, `title` TEXT, `topic` TEXT, `topic_guid` TEXT, `topic_url` TEXT," +
                        " `num_photo` TEXT, `youtube` TEXT, " +
                        " `selected` INTEGER NOT NULL, PRIMARY KEY(`id`));"
                Log.d("SQL", sql)
                database.execSQL(sql)
            }

        }

        @Volatile
        private var instance: AppDatabase? = null

        fun getDatabase(context: Context): AppDatabase{
            val tempInstance = instance
            if(tempInstance != null){
                return tempInstance
            }

            synchronized(AppDatabase::class.java){
                val dbInstance = Room.databaseBuilder(context,
                AppDatabase::class.java, "recipe-db")
                    .addMigrations(MIGRATION_1_2)
                    .build()

                instance = dbInstance
                return dbInstance
            }

        }
    }
}

i spent hours but still did not get the solution. Whats problem with my migration query?

Upvotes: 0

Views: 767

Answers (1)

Nanda Z
Nanda Z

Reputation: 1876

I found my problem, its because

expected

date=Column{name='date', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=0, defaultValue='null'}

what i did is

date=Column{name='date', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'},

Upvotes: 0

Related Questions