首页 > 解决方案 > lateinit 属性上下文尚未初始化

问题描述

我有一个类,它得到 acontext并将uri它们设置在 a MediaMetadatRetrieveras 中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

标签: androidkotlin

解决方案


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

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

你应该替换MyClass().start()this.start()


推荐阅读