android - lateinit 属性上下文尚未初始化
问题描述
我有一个类,它得到 acontext
并将uri
它们设置在 a MediaMetadatRetriever
as 中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
解决方案
问题是,当调用方法时,startThread()
您每次都使用未初始化的属性创建新对象。
fun startThread() {
MyClass().start()
}
你应该替换MyClass().start()
为this.start()
推荐阅读
- python - 如何多次运行一个函数并返回不同的结果python
- sql - Left Join 在匹配数据上返回 NULL
- java - Object2ObjectOpenHashMap put 方法中的 Nullpointerexception
- rust - async_std::sync::Arc 的目的是什么?
- amazon-web-services - 在 S3 静态网站托管中返回错误文档时是否可以自定义 HTTP 状态代码
- ckeditor - CRM 中的 CKEditor - SCRIPT5011 错误“无法从已释放的脚本中执行代码”
- vue.js - 如文档中所示,Kendo vue 开关未显示?
- google-cloud-platform - GKE Connect 成功启动,但集群未显示在 GCP 控制台中
- linux-kernel - 如何创建/一般步骤来创建适用于 Linux 内核的 SDK 和给定的 cpu 架构?
- reactjs - 来自后台时反应本机刷新令牌