WM-заводской метод без интерфейса getBackgroundExecutor()

#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. Точно… в этом-то и была проблема. Я изменил зависимость, и это сработало