Android - Retrofit2. Тема изменилась после запроса REST API

Den спросил: 22 октября 2018 в 08:56 в: android

У меня есть функция, которая возвращает мне AgentEntity, она сначала проверяет базу данных Realm и возвращает объект, если она уже есть в базе данных. Если объект не найден, вызывается функция REST API для получения данных, помещения их в базу данных и их возврата. Мой код:

suspend fun getAgent(id: String): AgentEntity {
    // Worker thread    val realm = Realm.getDefaultInstance()    val agent = realm.where(AgentRealmModel::class.java)
        .equalTo("id", id)
        .findFirst()    return if (agent != null) {
        AgentEntity(agent)
    } else {
        val agentResponse = apiService.api.getAgentsInfo(
            AgentRequest(listOf(id))
        ).await()        val realmModel = AgentRealmModel(agentResponse)        realm.executeTransaction { // throws Exeception, because Realm was created in another thread
            it.insert(realmModel)
        }        AgentEntity(realmModel)
    }
}

Я использую Kotlin Coroutines, и эта функция приостановки вызывается из Dispatchers.Default пула потоков.

Проверьте комментарии в моем код. Когда я пытаюсь вызвать realm.executeTransaction, выдается исключение, потому что после вызова apiService.api.getAgentsInfo().await() поток был изменен и не был изменен обратно. Можно ли остаться в одной теме? Я не хочу создавать новый экземпляр Realm, потому что это занимает много времени, было бы довольно удивительно, просто использовать тот же поток.

0 ответов