lateinit属性上下文尚未初始化

时间:2018-10-24 10:22:27

标签: android kotlin

我有一个类,它获取一个contexturi并将它们在MediaMetadatRetriever中设置为dataSource。问题是我使用withContext函数初始化了上下文属性,但似乎未初始化,最终以kotlin.UninitializedPropertyAccessException结尾。任何帮助表示赞赏。

班级

class MyClass: Thread() {

    private lateinit var context: Context
    private lateinit var uri: Uri
    private val retriever = MediaMetadataRetriever()

    override fun run() {
        setRetriever()
    }

    fun withContext(context: Context) {
        this.context = context
    }

    fun withUri(uri: Uri) {
        this.uri = uri
    }

    fun setRetriever() {
        retriever.setDataSource(context, uri)
    }

    fun startThread() {
        MyClass().start()
    }
}

主要活动:

val myClass = MyClass()
myClass.withContext(this)
myClass.withUri(uri)
myClass.startThread()

例外:

kotlin.UninitializedPropertyAccessException: lateinit property context has not been initialized

1 个答案:

答案 0 :(得分:1)

问题在于,在调用方法startThread()时,您每次都使用未初始化的属性创建新对象。

fun startThread() {
    MyClass().start()
}

您应将MyClass().start()替换为this.start()