Я использую компоненты архитектуры и комнаты, но я не думаю, что это оттуда
Я использую сопрограммы для вставки и извлечения данных из базы данных. Все работало нормально, пока я не пришел к этой проблеме
Эта последняя проблема была решена, но он вызвал другую проблему. Раньше одна из моих подпрограмм для вставки данных работала нормально, и теперь код внутри 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
(не проходя мимо функции), она тоже не будет работать
Хочу напомнить, что этот код раньше работал прекрасно и перестал работать, когда произошла не связанная ошибка. Приложение не падает, просто код не читается. Все остальные запросы вставки в моем приложении работают, все остальные с функциями Context и 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)
}
}
}
}