首页 > 解决方案 > Android Hilt:找不到符号 DaggerBaseApplication_HiltComponents_SingletonC.builder()

问题描述

我正在尝试使用 CoroutineWorker 来安排一些工作,在这些工作中我将读取 json 文件并更新首选项管理器。

问题是我收到以下错误:

Hilt_BaseApplication.java:20:错误:找不到符号返回 DaggerBaseApplication_HiltComponents_SingletonC.builder() ^ 符号:变量 DaggerBaseApplication_HiltComponents_SingletonC

BaseApplication: @HiltAndroidApp 类 BaseApplication:Application(),Configuration.Provider {

@Inject
lateinit var workerFactory: HiltWorkerFactory

override fun onCreate() {
    super.onCreate()

    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)

    Timber.plant(Timber.DebugTree())

    NewsRepository.readNews()

    scheduleWorker()
}

private fun scheduleWorker(){
    val constraints = Constraints.Builder()
        .setRequiredNetworkType(NetworkType.CONNECTED)
        .build()

    val checkPatchWR = PeriodicWorkRequestBuilder<CheckPatchWorker>(15, TimeUnit.MINUTES, 10, TimeUnit.MINUTES)
        .setConstraints(constraints)
        .build()

    val reminderWR = PeriodicWorkRequestBuilder<RemindMeToWorkWorker>(2, TimeUnit.HOURS, 30, TimeUnit.MINUTES).build()

    WorkManager.getInstance(this).enqueue(checkPatchWR)
    WorkManager.getInstance(this).enqueue(reminderWR)

    Timber.d("Setup the worker !")
}

override fun getWorkManagerConfiguration(): Configuration = Configuration.Builder().setWorkerFactory(workerFactory).build()

}

CheckPatchWorker:

@HiltWorker
class CheckPatchWorker @AssistedInject constructor
    (
        @Assisted private val appContext: Context,
        @Assisted workerParameters: WorkerParameters,
        private val preferenceManager: PreferencesManager
    ): CoroutineWorker(appContext, workerParameters){

    val patchesUrl = "https://ddragon.leagueoflegends.com/api/versions.json"

    override suspend fun doWork(): Result {


        val patch = readLastPatchNotes()

        preferenceManager.patchFlow.collect {
            val lastPatch = it.yes

            if(!(patch.equals(lastPatch))){
                var builder = NotificationCompat.Builder(appContext, Constants.CHANNEL_PATCH_ID)
                    .setSmallIcon(R.drawable.challenger_1)
                    .setContentTitle("Patch notes")
                    .setContentText("A new version of patch notes was released ! Come check it out !")
                    .setPriority(NotificationCompat.PRIORITY_DEFAULT)
                    .setAutoCancel(true)
                    .setStyle(
                        NotificationCompat.BigTextStyle()
                            .bigText("New patch notes $lastPatch !!!! "))

                val pendingIntent = NavDeepLinkBuilder(appContext)
                    .setComponentName(MainActivity::class.java)
                    .setGraph(R.navigation.navigation_graph)
                    .setDestination(R.id.newsFragment)
                    .setArguments(bundleOf("worker" to "News"))
                    .createPendingIntent()

                builder.setContentIntent(pendingIntent)

                createNotificationChannel(builder)

                preferenceManager.updatePatch(lastPatch)
            }
        }




        return Result.success()
    }

    private fun readLastPatchNotes(): String {
        val jsonArticles = JSONArray(URL(patchesUrl).readText())

        return jsonArticles.getString(0)
    }

    fun createNotificationChannel(builder: NotificationCompat.Builder) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            val name = Constants.CHANNEL_PATCH_ID
            val descriptionText = "Patch notes"
            val importance = NotificationManager.IMPORTANCE_DEFAULT
            val channel = NotificationChannel(Constants.CHANNEL_PATCH_ID, name, importance).apply {
                description = descriptionText
            }
            // Register the channel with the system
            val notificationManager: NotificationManager = appContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
            notificationManager.createNotificationChannel(channel)

            notificationManager.notify(0, builder.build())
        }
    }
}

AndroidManifest.xml

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

build.gradle(项目):

buildscript {
    ext.kotlin_version = "1.4.31"
    ext.hilt_version = '2.38.1'
    repositories {
        google()
        jcenter()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:4.1.3'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "com.google.dagger:hilt-android-gradle-plugin:$hilt_version"
        classpath 'com.google.gms:google-services:4.3.5'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        maven { url "https://jitpack.io" }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

build.gradle - 应用程序(仅相关代码):

plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'kotlin-kapt'
    id 'dagger.hilt.android.plugin'
    id 'com.google.gms.google-services'
}

    implementation "com.google.dagger:hilt-android:$hilt_version"
    kapt "com.google.dagger:hilt-compiler:$hilt_version"
    implementation 'androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03'
    annotationProcessor 'androidx.hilt:hilt-compiler:1.0.0'

标签: androidandroid-studiodependency-injectionworkerdagger-hilt

解决方案


推荐阅读