Я использую компоненты архитектуры и комнату, но я не думаю, что это происходит оттуда. Я использую сопрограммы для вставки и извлечения данных из базы данных. Все работало нормально, пока я не столкнулся с этой проблемой
Эта последняя проблема была решена, но он вызвал другую проблему. Одна из моих сопрограмм для вставки данных раньше работала нормально, а теперь код внутри withContext(Dispatchers.IO) {
никогда не читается. Все остальные функции работают, и эта раньше тоже была. Приложение не аварийно завершает работу, нет журнала ошибок, но данные не вставляются, потому что withContext никогда не читается
Я попытался перестроить проект, перезапустить Android Studio, переустановить приложение, но ничего не помогло, я сузил ошибку до этих нескольких строк, но я ничего не нашел об этой ошибке в Интернете, я пробовал переименовывая его, передавая его другой функцией, но ничего, это Черная магия, и я понятия не имею, почему он вдруг перестал работать, я даже не модифицировал код за последнюю неделю.
fun insertNewStats(sessionID: Long, fishSpeciesID: Int) {
uiScope.launch {
//This access to database is working fine
val stats = checkDatabaseForStats(sessionID, fishSpeciesID)
if (stats == null) {
//This is the call of the function that is not working
insertStatsToDatabase(sessionID, fishSpeciesID)
} else {
stats.numberOfCatch++
updateStatsToDatabase(stats)
}
}
}
это checkDatabaseForStats, если я поставлю здесь вставку, она будет работать отлично, то есть она исходит не из функции DAO, а из withContext
private suspend fun checkDatabaseForStats(sessionID: Long, fishSpeciesID: Int) : SessionsFishStats?{
return withContext(Dispatchers.IO) {
val stats = database.getStat(sessionID, fishSpeciesID)
stats
}
}
Часть, которая не работает, достигнута функция, а не withContext
private suspend fun insertStatsToDatabase(sessionID: Long, fishSpeciesID: Int) {
//This function is reached, the code put there will be read and work
withContext(Dispatchers.IO) {
//And from there nothing, this code is never reached
database.insertStats(
SessionsFishStats(fk_sessionId = sessionID, fishSpeciesId = fishSpeciesID, numberOfCatch = 1L)
)
}
}
Это запрос в моем DAO
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertStats(stats: SessionsFishStats)
Если я поставлю withContext
непосредственно в insertNewStats
(не передавая функцию), это тоже не сработает.
Я хочу напомнить, что этот код работал отлично и перестал работать, когда произошла не связанная с этим ошибка. Приложение не вылетает, просто код не читается. Все остальные запросы на вставку в моем приложении работают, все остальные функции withContext и DAO тоже работают отлично, только этот был проклят ни по какой причине, кроме как по черной магии
Я сделал это, просто поместил все в одну и ту же функцию, и это сработало отлично. Это странно, и я не знаю, почему...
fun whyIsThisWorking(sessionID: Long, fishSpeciesID: Int) {
uiScope.launch {
withContext(Dispatchers.IO) {
val stat = database.getStat(sessionID, fishSpeciesID)
if (stat == null) {
database.insertStat(
SessionsFishStats(fk_sessionId = sessionID, fishSpeciesId = fishSpeciesID, numberOfCatch = 1L)
)
} else {
stat.numberOfCatch++
database.updateStats(stat)
}
}
}
}