Hilt + Worker NoSuchMethodException: [класс android.content.Context, класс androidx.work.WorkerParameters]Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Hilt + Worker NoSuchMethodException: [класс android.content.Context, класс androidx.work.WorkerParameters]

Сообщение Anonymous »

Я столкнулся с исключением при попытке поставить работу в очередь с помощью Hilt и WorkManager:

Код: Выделить всё

Could not instantiate my.example.package.widget.ExampleWorker
java.lang.NoSuchMethodException: my.example.package.widget.ExampleWorker. [class android.content.Context, class androidx.work.WorkerParameters]
at java.lang.Class.getConstructor0(Class.java:3325)
at java.lang.Class.getDeclaredConstructor(Class.java:3063)
at androidx.work.WorkerFactory.createWorkerWithDefaultFallback(WorkerFactory.java:95)
at androidx.work.impl.WorkerWrapper.runWorker(WorkerWrapper.java:243)
at androidx.work.impl.WorkerWrapper.run(WorkerWrapper.java:145)
at androidx.work.impl.utils.SerialExecutorImpl$Task.run(SerialExecutorImpl.java:96)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
at java.lang.Thread.run(Thread.java:1012)
14:26:51.737  E  Could not create Worker my.example.package.widget.ExampleWorker
Вот мой рабочий класс:

Код: Выделить всё

@HiltWorker
class ExampleWorker @AssistedInject constructor(
@Assisted private val context: Context,
@Assisted workerParameters: WorkerParameters,
private val exampleUseCase: ExampleUseCase
) : CoroutineWorker(context, workerParameters) {

companion object {

private val uniqueWorkName = ExampleWorker::class.java.simpleName

fun enqueue(context: Context) {
val manager = WorkManager.getInstance(context)
val requestBuilder = PeriodicWorkRequestBuilder(
Duration.ofMinutes(15)
)

manager.enqueueUniquePeriodicWork(
uniqueWorkName,
ExistingPeriodicWorkPolicy.UPDATE,
requestBuilder.build()
)
}
}

override suspend fun doWork(): Result {
exampleUseCase.invoke()
return Result.success()
}
}
Мое приложение HiltApp:

Код: Выделить всё

@HiltAndroidApp
class HiltApp : Application(), Configuration.Provider {

// https://developer.android.com/training/dependency-injection/hilt-jetpack#workmanager
@Inject
lateinit var workerFactory: HiltWorkerFactory

override fun getWorkManagerConfiguration(): Configuration =
Configuration.Builder()
.setWorkerFactory(workerFactory)
.build()
}
В файле AndroidManifest.xml я удалил инициализатор по умолчанию согласно руководству:
https://developer.android.com/guide/bac ... iguration/ пользовательская-конфигурация#удалить-по умолчанию

Код: Выделить всё

    android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
tools:node="remove" />
Упрощенный класс, который я внедряю в своего работника:

Код: Выделить всё

class ExampleUseCase @Inject constructor() {
operator fun invoke() {}
}
Вот мои зависимости:

Код: Выделить всё

implementation("com.google.dagger:hilt-android:2.48.1")
ksp("com.google.dagger:hilt-android-compiler:2.48.1")

implementation("androidx.hilt:hilt-work:1.0.0")
ksp("androidx.hilt:hilt-compiler:1.0.0")

implementation("androidx.work:work-runtime-ktx:2.8.1")
implementation("androidx.work:work-runtime:2.8.1")
Версия плагина Gradle: 8.1.1, версия Kotlin: 1.9.10
Я столкнулся с этим исключением после обновления нескольких зависимостей в моем проекте, таких как плагин Gradle с 7.4.1 по 8.1.1, Kotlin с 1.8.0 по 1.9.10, Hilt с 2.44.2 по 2.48.1 и скомпилировать SDK с 33 на 34, среди прочего.
Я попытался понизить версию Hilt, однако при этом я столкнулся с новыми исключениями, которые, как я полагаю, могут быть вызваны несовместимостью версий среди всех этих обновленные библиотеки.
Если я удалю параметр exampleUseCase из рабочего конструктора, исключение NoSuchMethodException будет разрешено. Однако мне требуется это поле в методе doWork(). Я попытался внедрить его как lateinit var, но к моменту вызова он не инициализируется.
Я проверил много документации, но не могу все еще чего-то не хватает. Буду очень признателен за любую помощь!

Подробнее здесь: https://stackoverflow.com/questions/772 ... ntext-clas
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»