У меня есть исследования в Интернете, но я не могу найти какое -либо решение для следующей проблемы: < /p>
У меня есть приложение, которое использует базу данных комнаты. Версия комнаты = 2.6.1
После некоторого времени не используется или в неожиданных случаях приложение бросает следующее исключение: < /p>
Java.lang.illegalstateException: Комната не может проверить целостность данных. Похоже, вы изменили схему, но забыли обновить номер версии. Вы можете просто исправить это, увеличив номер версии. Ожидаемый идентификационный хэш: 33163C2D5EEE97B7482F9E26308BF995, найдено: null
Схема вообще не была изменена.
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
open class RoomOpenHelper(
configuration: DatabaseConfiguration,
delegate: Delegate,
identityHash: String,
legacyHash: String
) : SupportSQLiteOpenHelper.Callback(delegate.version) {
private var configuration: DatabaseConfiguration?
private val delegate: Delegate
private val identityHash: String
..................
..................
..................
..................
override fun onOpen(db: SupportSQLiteDatabase) {
super.onOpen(db)
checkIdentity(db)
delegate.onOpen(db)
// there might be too many configurations etc, just clear it.
configuration = null
}
private fun checkIdentity(db: SupportSQLiteDatabase) {
if (hasRoomMasterTable(db)) {
val identityHash: String? = db.query(
SimpleSQLiteQuery(RoomMasterTable.READ_QUERY)
).useCursor { cursor ->
if (cursor.moveToFirst()) {
cursor.getString(0)
} else {
null
}
}
if (this.identityHash != identityHash && this.legacyHash != identityHash) {
throw IllegalStateException(
"Room cannot verify the data integrity. Looks like" +
" you've changed schema but forgot to update the version number. You can" +
" simply fix this by increasing the version number. Expected identity" +
" hash: ${ this.identityHash }, found: $identityHash"
)
}
} else {
// No room_master_table, this might an a pre-populated DB, we must validate to see if
// its suitable for usage.
val result = delegate.onValidateSchema(db)
if (!result.isValid) {
throw IllegalStateException(
"Pre-packaged database has an invalid schema: ${result.expectedFoundMsg}"
)
}
delegate.onPostMigrate(db)
updateIdentity(db)
}
}
private fun updateIdentity(db: SupportSQLiteDatabase) {
createMasterTableIfNotExists(db)
db.execSQL(RoomMasterTable.createInsertQuery(identityHash))
}
private fun createMasterTableIfNotExists(db: SupportSQLiteDatabase) {
db.execSQL(RoomMasterTable.CREATE_QUERY)
}
< /code>
В базе данных на устройстве есть rap_master_table существует, но является пустой.
room пытается сравнить идентификацию_hash текущей схемы с идентификацией_hash, хранящейся в базе данных и не сбои. Если TRUE, он сравнивает идентификацию_HASH, а если нет, он пытается воссоздать таблицу с помощью Identity_hash
, поскольку в моем случае таблица существует, но она пуста, она бросает нелегальное организацию. < /p>
. Это происходит после того, как пользователь использует приложение и оставляет его на некоторое время. Мне не нравится такое решение, поэтому я хотел бы знать, что кто -то столкнулся с той же проблемой или есть обходной путь.>
Подробнее здесь: https://stackoverflow.com/questions/795 ... rity-issue
RoomDatabase - Комната не может проверить проблему целостности данных ⇐ Android
Форум для тех, кто программирует под Android
1741702484
Anonymous
У меня есть исследования в Интернете, но я не могу найти какое -либо решение для следующей проблемы: < /p>
У меня есть приложение, которое использует базу данных комнаты. Версия комнаты = 2.6.1
После некоторого времени не используется или в неожиданных случаях приложение бросает следующее исключение: < /p>
Java.lang.illegalstateException: Комната не может проверить целостность данных. Похоже, вы изменили схему, но забыли обновить номер версии. Вы можете просто исправить это, увеличив номер версии. Ожидаемый идентификационный хэш: 33163C2D5EEE97B7482F9E26308BF995, найдено: null
[b] Схема вообще не была изменена. [/b]
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
open class RoomOpenHelper(
configuration: DatabaseConfiguration,
delegate: Delegate,
identityHash: String,
legacyHash: String
) : SupportSQLiteOpenHelper.Callback(delegate.version) {
private var configuration: DatabaseConfiguration?
private val delegate: Delegate
private val identityHash: String
..................
..................
..................
..................
override fun onOpen(db: SupportSQLiteDatabase) {
super.onOpen(db)
checkIdentity(db)
delegate.onOpen(db)
// there might be too many configurations etc, just clear it.
configuration = null
}
private fun checkIdentity(db: SupportSQLiteDatabase) {
if (hasRoomMasterTable(db)) {
val identityHash: String? = db.query(
SimpleSQLiteQuery(RoomMasterTable.READ_QUERY)
).useCursor { cursor ->
if (cursor.moveToFirst()) {
cursor.getString(0)
} else {
null
}
}
if (this.identityHash != identityHash && this.legacyHash != identityHash) {
throw IllegalStateException(
"Room cannot verify the data integrity. Looks like" +
" you've changed schema but forgot to update the version number. You can" +
" simply fix this by increasing the version number. Expected identity" +
" hash: ${ this.identityHash }, found: $identityHash"
)
}
} else {
// No room_master_table, this might an a pre-populated DB, we must validate to see if
// its suitable for usage.
val result = delegate.onValidateSchema(db)
if (!result.isValid) {
throw IllegalStateException(
"Pre-packaged database has an invalid schema: ${result.expectedFoundMsg}"
)
}
delegate.onPostMigrate(db)
updateIdentity(db)
}
}
private fun updateIdentity(db: SupportSQLiteDatabase) {
createMasterTableIfNotExists(db)
db.execSQL(RoomMasterTable.createInsertQuery(identityHash))
}
private fun createMasterTableIfNotExists(db: SupportSQLiteDatabase) {
db.execSQL(RoomMasterTable.CREATE_QUERY)
}
< /code>
В базе данных на устройстве есть rap_master_table существует, но является пустой.
room пытается сравнить идентификацию_hash текущей схемы с идентификацией_hash, хранящейся в базе данных и не сбои. Если TRUE, он сравнивает идентификацию_HASH, а если нет, он пытается воссоздать таблицу с помощью Identity_hash
, поскольку в моем случае таблица существует, но она пуста, она бросает нелегальное организацию. < /p>
. Это происходит после того, как пользователь использует приложение и оставляет его на некоторое время. Мне не нравится такое решение, поэтому я хотел бы знать, что кто -то столкнулся с той же проблемой или есть обходной путь.>
Подробнее здесь: [url]https://stackoverflow.com/questions/79501052/roomdatabase-room-cannot-verify-the-data-integrity-issue[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия