контекст свойства lateinit не был инициализирован - PullRequest
0 голосов
/ 24 октября 2018

У меня есть класс, который получает 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

1 Ответ

0 голосов
/ 24 октября 2018

Проблема в том, что при вызове метода startThread() вы каждый раз создаете новый объект с неинициализированным свойством.

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

Вы должны заменить MyClass().start() на this.start()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...