我有一个类,它获取一个context
和uri
并将它们在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
答案 0 :(得分:1)
问题在于,在调用方法startThread()
时,您每次都使用未初始化的属性创建新对象。
fun startThread() {
MyClass().start()
}
您应将MyClass().start()
替换为this.start()