Kotlin kovenant succesUi 在错误的线程上?

标签 kotlin

我对 Kovenant 有一个奇怪的问题。要么我不明白,要么有一些错误。下面的代码是一个简单的 Android task { } successUi { }。然而,succesUi生成android.view.ViewRootImpl$CalledFromWrongThreadException:只有创建 View 层次结构的原始线程才能触摸其 View 。,当检查线程名称时,它是: kovenant-callback-2,不是主线程iv,而是ImageView

    val promesa1 = task {
        val nazwa = Thread.currentThread().name
        print(nazwa)
    } successUi {
        val nazwa = Thread.currentThread().name
        print(nazwa)

        try {
            iv!!.setImageBitmap(null)
        } catch (ex : Exception) {
            print("Mamy:"+ex.toString())
        }
    }

最佳答案

在 MainActivity 上调用 startKovenant()(和 stopKovenant())非常重要。这将通过保持线程事件并将正确的调度程序附加到 UI 回调来设置 Kovenant 以与 Android 一起使用。

所以类似:

public class MainActivity : ... {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(...)

        // Configure Kovenant with standard dispatchers
        startKovenant()

    }

    ...

    override fun onDestroy() {
        stopKovenant()
        super.onDestroy()
    }
}

有关此主题的更多信息可以在 Android configuration documentation 中找到。

关于Kotlin kovenant succesUi 在错误的线程上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34672514/

相关文章:

android - Android Studio 中 Android 应用的 Google Play 许可

android - 'this@ActivityName' 未捕获错误 Android/Kotlin

Kotlin,是否可以访问这对 map ?

gradle - Kotlin Gradle脚本设置

Kotlin fun() vs lambda 有区别吗?

android - 如何在 Kotlin 中获取协程的名称?

android - Kotlin:如何使用 Spinner 将项目设置为 RecyclerViewAdapter?

android - 如何使 'this' 成为 Listener 的引用而不是 Kotlin 中的 Activity?

node.js - 使用intellij idea ce在kotlin中编写nodejs应用程序

java - 使用使用 kotlin-maven-plugin 构建的 jar 中的 Kotlin 类