#android #kotlin #kotlin-coroutines
Вопрос:
Я изучаю разработку Android от Android_developer. при использовании CoroutinesWorker я столкнулся с проблемой во время работы с Kotlin
Logcat
com.google.samples.apps.devbyteviewer E/WM-WorkerFactory: Could not instantiate com.google.samples.apps.devbyteviewer.work.RefreshDataWorker java.lang.reflect.InvocationTargetException at java.lang.reflect.Constructor.newInstance0(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:343) at androidx.work.WorkerFactory.createWorkerWithDefaultFallback(Worker Factory.java:96) at androidx.work.impl.WorkerWrapper.runWorker(WorkerWrapper.java: 244) at androidx.work.impl.WorkerWrapper.run(WorkerWrapper.java:136)
Класс приложения, из которого я создаю экземпляр workmanager.
Класс приложения
package com.google.samples.apps.devbyteviewer import android.app.Application import androidx.work.* import com.google.samples.apps.devbyteviewer.work.RefreshDataWorker import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import timber.log.Timber import java.util.concurrent.TimeUnit
Как я читал в соответствующих сообщениях, мой рабочий класс является классом верхнего уровня и находится в независимом файле.
Рабочий класс
package com.google.samples.apps.devbyteviewer.work import android.content.Context import androidx.work.CoroutineWorker import androidx.work.WorkerParameters import com.google.samples.apps.devbyteviewer.database.getDatabase import com.google.samples.apps.devbyteviewer.repository.VideosRepository import retrofit2.HttpException import timber.log.Timber class RefreshDataWorker(appContext: Context, params: WorkerParameters) : CoroutineWorker(appContext, params) { override suspend fun doWork(): Result { val database = getDatabase(applicationContext) val repository = VideosRepository(database) try { repository.refreshVideos() Timber.d("Work request for sync is run") } catch (e: HttpException) { return Result.retry() } return Result.success() } companion object { /** * Define a work name to uniquely identify this worker. */ const val WORK_NAME = "com.example.android.devbyteviewer.work.RefreshDataWorker" } }
Комментарии:
1. Есть ли что-то еще в трассировке стека? Я ожидал бы другого раздела (или более), начинающегося с «Вызвано» и вложенного исключения.
Ответ №1:
У меня была та же проблема при работе с WorkManager.
Извлекая смысл из вашего сообщения и сообщения об ошибке, это, скорее всего, проблема, связанная с импортом. Проверьте зависимости ваших приложений.
Скорее, чем:
implementation "android.arch.work:work-runtime-ktx:$work_version"
Воспользуйся:
implementation "androidx.work:work-runtime-ktx:$work_version"
Комментарии:
1. спасибо за быстрый ответ.
2. Точно… в этом-то и была проблема. Я изменил зависимость, и это сработало