Сопрограмма «withContext» больше не достает и не читает, перестает работать без причины - PullRequest
0 голосов
/ 09 июля 2019

Я использую компоненты архитектуры и комнаты, но я не думаю, что это оттуда Я использую сопрограммы для вставки и извлечения данных из базы данных. Все работало нормально, пока я не пришел к этой проблеме

Эта последняя проблема была решена, но он вызвал другую проблему. Раньше одна из моих подпрограмм для вставки данных работала нормально, и теперь код внутри 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)
                }
            }
        }
    }
...