Вариант использования : мне нужно получить обратную связь от пользователей, сохранить ее в постоянном хранилище, в данном случае в его комнате.И через каждые X минут я хочу отправлять эти сохраненные FeedbackRequest
на сервер.
Решение : Я думал об использовании WorkManager, так как это действие должно пережить смерть процесса и также быть запущеннымпериодически.Мне нужно получить список FeedbackRequest
из Room DB и использовать клиент Retrofit для отправки каждого FeedbackRequest
на сервер.
Определение проблемы : FeedbackRequestRepository
, чтоотвечает за получение списка FeedbackRequest
, требуется в методе doWork()
WorkManager для получения данных из Room DB.Кроме того, я новичок в Dagger2
.Я получаю указанную ошибку после открытия приложения.
Фрагмент кода AppComponent
interface AppComponent {
@Component.Builder
interface Builder {
@BindsInstance
fun application(application: Application): Builder
fun build(): AppComponent
}
fun inject(scFeedbackApp: ScFeedbackApp)
fun inject(dispatchWorker: DispatchWorker)
}
Фрагмент кода репозитория
@Singleton
class FeedbackRequestRepository @Inject constructor(
private val appExecutors: AppExecutors,
private val db: ScFeedbackDB,
private val feedbackAcknowledgeDao: FeedbackRequestDao,
private val scFeedbackFeedbackService: SCFeedbackService
) {
...
}
Фрагмент рабочего кода
class DispatchWorker @Inject constructor(context:Context,
workerParameters: WorkerParameters,
var feedbackRequestRepository: FeedbackRequestRepository):
Worker(context, workerParameters){
init {
DaggerAppComponent.builder().application(context.applicationContext as ScFeedbackApp)
.build().inject(this)
}
override fun doWork(): Result {
...
}
Ошибка
E/WorkerFactory: Could not instantiate com.scfeedback.service.responseDispatcher.DispatchWorker
java.lang.NoSuchMethodException: <init> [class android.content.Context, class androidx.work.WorkerParameters]
at java.lang.Class.getConstructor(Class.java:528)
at java.lang.Class.getDeclaredConstructor(Class.java:507)
at androidx.work.WorkerFactory.createWorkerWithDefaultFallback(WorkerFactory.java:85)
at androidx.work.impl.WorkerWrapper.runWorker(WorkerWrapper.java:188)
at androidx.work.impl.WorkerWrapper.run(WorkerWrapper.java:124)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
E/WorkerWrapper: Could not create Worker com.scfeedback.service.responseDispatcher.DispatchWorker
- Имеет ли эточто-то делать с настройкой Dependency Inject.
- Если нет, то где я ошибаюсь.