Hello, when I add new dependencies in the worker c...
# android-architecture
t
Hello, when I add new dependencies in the worker class. The message java.lang.NoSuchMethodException: com.example.clock.data.service.RescheduleAlarmWorker.init> is displayed. View the thread to see the complete code
RescheduleAlarmWorker
Copy code
@HiltWorker
class RescheduleAlarmWorker @AssistedInject constructor(
    @Assisted context: Context,
    @Assisted params: WorkerParameters,
    private val alarmRepository: AlarmRepository,
    private val scheduleAlarmManager: ScheduleAlarmManager,
) : CoroutineWorker(context, params) {

    override suspend fun doWork(): Result {
        return try {
            alarmRepository.alarmsList.buffer().collect { alarmsList ->
                for (alarm in alarmsList) {
                    if (alarm.isScheduled) {
                        scheduleAlarmManager.schedule(alarm)
                    }
                }
            }
            Result.success()
        } catch (throwable: Throwable) {
            Log.e(TAG, "doWork: failure")
            Result.failure()
        }
    }
}

private const val TAG = "RescheduleAlarmWorker"
RescheduleAlarmWorkerFactory
Copy code
class RescheduleAlarmWorkerFactory @Inject constructor(
    private val alarmRepository: AlarmRepository,
    private val scheduleAlarmManager: ScheduleAlarmManager
) : WorkerFactory() {
    override fun createWorker(
        appContext: Context,
        workerClassName: String,
        workerParameters: WorkerParameters,
    ): ListenableWorker? {
        return RescheduleAlarmWorker(appContext, workerParameters, alarmRepository, scheduleAlarmManager)
    }
}
WorkManagerInitializer
Copy code
@Module
@InstallIn(SingletonComponent::class)
object WorkManagerInitializer : Initializer<WorkManager> {

    @Provides
    @Singleton
    override fun create(@ApplicationContext context: Context): WorkManager {
        val configuration = Configuration.Builder().build()
        WorkManager.initialize(context, configuration)
        Log.d("Hilt Init", "WorkManager initialized by Hilt this time")
        return WorkManager.getInstance(context)
    }

    override fun dependencies(): List<Class<out Initializer<*>>> {
        return emptyList()
    }
}
ClockApplication
Copy code
@HiltAndroidApp
class ClockApplication : Application(), Configuration.Provider {

    @Inject lateinit var rescheduleAlarmWorkerFactory: RescheduleAlarmWorkerFactory

    override fun getWorkManagerConfiguration() =
        Configuration.Builder()
            .setMinimumLoggingLevel(Log.DEBUG)
            .setWorkerFactory(rescheduleAlarmWorkerFactory)
            .build()
}
Manifest
Copy code
<application                                                                                                                             ...                                                                                                                                       <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities="${applicationId}.androidx-startup"
        android:exported="false"
        tools:node="merge">
        <meta-data
            android:name="androidx.work.WorkManagerInitializer"
            android:value="androidx.startup"
            tools:node="remove" />
    </provider>

</application>
Build.gradle
Copy code
implementation 'com.google.dagger:hilt-android:2.45'
kapt 'com.google.dagger:hilt-compiler:2.45'
implementation "androidx.hilt:hilt-navigation-compose:1.0.0"
implementation 'androidx.hilt:hilt-work:1.0.0'
kapt 'androidx.hilt:hilt-compiler:1.0.0'
AlarmBroadcastReceiver
Copy code
@AndroidEntryPoint
class AlarmBroadcastReceiver : BroadcastReceiver() {

    @Inject
    lateinit var serviceManager: ServiceManager

    @Inject
    lateinit var scheduleAlarmManager: ScheduleAlarmManager

    @Inject
    lateinit var alarmRepository: AlarmRepository

    @Inject
    lateinit var workManager: WorkManager

    override fun onReceive(p0: Context?, p1: Intent?) {
        safeLet(p0, p1) { context, intent ->
            when (intent.action) {
                "android.intent.action.BOOT_COMPLETED" -> {
                    with(Dispatchers.Main) {
                        val rescheduleAlarmBuilder = OneTimeWorkRequestBuilder<RescheduleAlarmWorker>().build()
                        workManager.enqueue(rescheduleAlarmBuilder)
                    }
                }                                                                                                                       ...