Почему приложение Android аварийно завершает работу с SQLiteDiskIOException после обновления приложения?Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Почему приложение Android аварийно завершает работу с SQLiteDiskIOException после обновления приложения?

Сообщение Anonymous »

После выпуска моего приложения произошел следующий сбой.

Код: Выделить всё

Fatal Exception: android.database.sqlite.SQLiteDiskIOException: disk I/O error (code 1802 SQLITE_IOERR_FSTAT[1802]): , while compiling: PRAGMA cache_size
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(SQLiteConnection.java)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1540)
at android.database.sqlite.SQLiteConnection.executeForLong(SQLiteConnection.java:1075)
at android.database.sqlite.SQLiteConnection.setCacheSizeFromConfiguration(SQLiteConnection.java:536)
at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:416)
at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:228)
at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:758)
at android.database.sqlite.SQLiteConnectionPool.tryAcquireNonPrimaryConnectionLocked(SQLiteConnectionPool.java:1355)
at android.database.sqlite.SQLiteConnectionPool.waitForConnection(SQLiteConnectionPool.java:983)
at android.database.sqlite.SQLiteConnectionPool.acquireConnection(SQLiteConnectionPool.java:619)
at android.database.sqlite.SQLiteSession.acquireConnection(SQLiteSession.java:916)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
at android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:63)
at android.database.sqlite.SQLiteQuery.(SQLiteQuery.java:37)
at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:46)
at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:2278)
at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:2253)
at androidx.sqlite.db.framework.FrameworkSQLiteDatabase.query(FrameworkSQLiteDatabase.kt:156)
at androidx.room.RoomDatabase.query(RoomDatabase.kt:490)
at androidx.room.util.DBUtil.query(DBUtil.kt:75)
at myapppackage.data.datasource.db.language.MultiLanguageStationNameDao_Impl$1.call(MultiLanguageStationNameDao_Impl.java:37)
at myapppackage.data.datasource.db.language.MultiLanguageStationNameDao_Impl$1.call(MultiLanguageStationNameDao_Impl.java:34)
at androidx.room.CoroutinesRoom$Companion$createFlow$1$1$1.invokeSuspend(CoroutinesRoom.kt:128)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
at java.lang.Thread.run(Thread.java:1012)
Библиотека Room использовалась впервые в предыдущей версии, а база данных была обновлена ​​в следующей версии.
Это код построителя базы данных Room.

Код: Выделить всё

private fun buildDatabase(context: Context): AppDatabase {
return Room.databaseBuilder(
context,
AppDatabase::class.java, "new_database.db"
).createFromAsset("db/my_app_db.sqlite")
.fallbackToDestructiveMigration()
.build()
}
Файл sqlite импортирован из ресурсов, и в этот файл sqlite были добавлены новые данные.
Однако вновь добавленные данные не были запрошены в приложении, поэтому я проверил и обнаружил, что мне нужно увеличить версию, поэтому добавил к версии 1, как показано ниже. (ранее 1)

Код: Выделить всё

@Database(
entities = [
MultiLanguageStationNameEntity::class,
],
version = 2
)
Репозиторий

Код: Выделить всё

override fun getStationNames(): Flow {
return multiLanguageStationNameDao.getStationNames()
.map { entities ->
entities.map {
entity -> entity.asDomainModel()
}
}
}
Дао

Код: Выделить всё

@Dao
interface MultiLanguageStationNameDao {
@Query("SELECT * FROM MultiLanguageStationName")
fun getStationNames(): Flow
}
Интересно, что вызвало сбой.

Это потому, что приложение обновляется, пока база данных открыта?

Я это понимаю FallbackToDestructiveMigration() удалит и заново создаст базу данных.
Может ли это повлиять?

Подробнее здесь: https://stackoverflow.com/questions/782 ... update-app
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»