使用 Hilt 将 dao 注入到 Worker 中的问题

7
我已经在我的App类中初始化了一个worker,代码如下;
@HiltAndroidApp
class KutuphanemApplication:Application(),Configuration.Provider {

@Inject
lateinit var workerFactory: HiltWorkerFactory

override fun getWorkManagerConfiguration() =
    Configuration.Builder()
        .setMinimumLoggingLevel(android.util.Log.DEBUG)
        .setWorkerFactory(workerFactory)
        .build()

我希望在我的worker类中注入一个单例dao,以便更新数据库中的某些内容。因此,我像下面这样注入了dao;
 @HiltWorker
 class ClearImageNotInArchiveWorker @AssistedInject constructor(
      @Assisted val appContext: Context,
      @Assisted val workerParams: WorkerParameters,
      private val kitapDao: KitapDao): CoroutineWorker(appContext, workerParams) {

override suspend fun doWork(): Result {...}
}

当我在App类中引用WorkManager类时,出现了WorkerFactory: Could not instantiate com.mesutemre.kutuphanem.job.ClearImageNotInArchiveWorker的错误。但应用程序没有崩溃。这里注入dao有什么问题吗?此外,还有我的单例dao。
@Singleton
@Provides
fun provideKitapDao(database: KutuphanemDatabase) = database.getKitapDao();

我从清单中删除了它。 - emreturka
1个回答

8

我解决了这个问题。我把 hilt-compiler kapts 搞砸了。我已经添加了修复。

  kapt("androidx.hilt:hilt-compiler:1.0.0")

我将其添加到Gradle中

<provider
   android:name="androidx.startup.InitializationProvider"
   android:authorities="${applicationId}.androidx-startup"
   tools:node="remove">
</provider>

将内容添加到AndroidManifest.xml文件中。然后问题就解决了。


2
哇!你救了我! - yoonhok

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接