Как я могу вернуть значение из выполнения Executor - Kotlin - PullRequest
0 голосов
/ 16 января 2020

Как я могу вернуть значение с execute из Executor:

fun MyFunc(): Int {
private val executor: Executor =
    Executors.newSingleThreadExecutor()
  executor.execute { appRepository.tblCoursesIsEmptyAppRepo() }
}

Я использовал с postValue, но оно всегда возвращает мне старое значение.

Ответы [ 2 ]

0 голосов
/ 16 января 2020

Я использовал приведенный ниже исходный код, и он хорошо работает:

    val callable = Callable { appRepository.tblCoursesIsEmptyAppRepo() }

    val future = Executors.newSingleThreadExecutor().submit(callable)

    Log.i(TAG, future.get())
0 голосов
/ 16 января 2020

Использование kotlin Сопрограммы, они очень богаты и лаконичны, чем Executor, и вы можете получить значение liveata с помощью метода postValue ().

Чтобы использовать сопрограммы, добавьте файлы Gradle:

def coroutines_version = "1.3.3"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version"

и используйте ниже код:

    val handler = CoroutineExceptionHandler { _, exception ->
        exception.printStackTrace()
    }

    CoroutineScope(Dispatchers.IO).launch(handler) {
        resultLiveData.postValue(appRepository.tblCoursesIsEmptyAppRepo())
    }
...