android - Android 服务中的 Hilt 注入
问题描述
我想在Service
. 让我们看看下面的代码:
class DeviceUtil @Inject constructor() {
...
}
@AndroidEntryPoint
class LocationUpdateService : Service() {
@Inject
lateinit var deviceUtil: DeviceUtil
...
}
@Inject lateinit var deviceUtil: DeviceUtil
在 Activity 中工作正常,但在Service
.
它给出了错误: kotlin.UninitializedPropertyAccessException: lateinit property deviceUtil has not been initialized
解决方案
对于像我这样的傻瓜。正如 OP 在评论中所说,一个完整的例子,你可以service
像这样注入对象:
import android.app.Service
import android.content.Intent
import android.os.Binder
import android.os.IBinder
import android.util.Log
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
import com.yourapp.services.UserService
@AndroidEntryPoint
class MyService: Service() {
@Inject lateinit var userService: UserService
override fun onCreate() {
super.onCreate()
userService.getUserList()
.subscribe { userList -> Log.d("tag", "users: $userList") }
}
override fun onBind(intent: Intent?): IBinder? {
return object: Binder() {
// ...
}
}
}
至于您要注入的服务,请确保它的构造函数中有 @Inject 注释,如下所示:
class UserService @Inject() constructor() {
// ...
}
推荐阅读
- unicode - html页面中的Unicode字符
- .htaccess - 使用 phpmvc 时,url 将 www 重写为非 www 并删除参数 index.php?url
- excel - 如何解决 vba 中的溢出错误?
- azure-devops - 在新的拉取请求上自动创建工作项
- python - 在 Python 中进行网页抓取时循环网页(如谷歌搜索)
- spring-boot - Spring Boot 2.2 出现错误“带有 ID 'junit-vintage' 的 TestEngine 无法发现测试”
- python - 使用 Python 删除 csv 中的行
- php - 通过 AJAX 访问 php 文件返回 403 Forbidden
- ios - 当由“navigator.share()”(Web 共享 API)触发时,禁用 App 的 iOS 共享屏幕
- java - 线程子类中的同步方法