WorkManager Java Android Dagger2
WorkManager Java Android Dagger2
我需要在 Android 应用程序中使用 Workmanager,只有 JAVA(没有 Kotlin!!!)。
在一个项目中,我们只使用 dagger2.8(没有 android-dagger!),我需要注入或访问一些注入的 类,例如数据库。 (它注入了 AppComponent)。
已经尝试过:
https://proandroiddev.com/dagger-2-setup-with-workmanager-a-complete-step-by-step-guild-bb9f474bde37
在 kotlin 中并在 Java 中重写。 - 在项目中不起作用。
(以及 Whosebug 上的所有关闭标题)
还有很多关于 web 的例子相互复制......(它们都是 Kotlin 的......)
我将所有库更新为实际版本,从 3.2.1 更新到 3.4.1,包含所有内容。
使用:AS 3.4.1 | gp:3.4.1 | gv:5.1.1 库:Dagger2、Retrofit2、OkHttp、Gson、ButterKnife、RxJava2、Room、Rabbit、WorkManager。它在 28 sdk 上
有我的工人:
private String TAG = getClass().getSimpleName();
DBModel dbModel; // this is injected room model in appComponent
public UIUpdaterWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
}
@NonNull
@Override
public Result doWork() {
Log.d(TAG, dbModel.toString()); // here is null
return Result.success();
我在同一个组件中尝试过,然后分开。它不会起作用。为 null 或项目未生成。
如您链接的文章中所述,您需要将 WorkManager's custom configuration 与自定义 WorkerFactory 一起使用,将附加参数传递给您的 Worker class:
public class UIUpdaterWorker extends Worker {
private String TAG = getClass().getSimpleName();
public UIUpdaterWorker(
@NonNull Context context,
@NonNull WorkerParameters workerParams,
@NonNull DBModel dbModel
) {
super(context, workerParams);
}
@NonNull
@Override
public Result doWork() {
Log.d(TAG, dbModel.toString());
return Result.success();
}
}
然后您可以用 Dagger 注入它(DBModel
在您的情况下)。
我喜欢 WorkManager 2.1.0-alpha02 中添加的新“DelegatingWorkerFactory”功能(或者您可以自己采用类似的设计)。我制作了一个 PoC(在 Kotlin 中),它创建了一个自定义配置并为需要用 dagger 注入额外参数的特定工作人员注册了一个 WorkerFactory。
您可以在 Plaid branch, Worker and WorkerFactory are here 上找到代码。要为您的具体案例提供更多指导,了解更多背景信息会很有帮助。我可以想象您已经在其他 classes.
中注入了 dbModel
您可以在注册自定义 WorkerFactory 时执行相同的操作,注入 dbModel,这样您就可以将其作为参数传递给 Worker class。
我需要在 Android 应用程序中使用 Workmanager,只有 JAVA(没有 Kotlin!!!)。 在一个项目中,我们只使用 dagger2.8(没有 android-dagger!),我需要注入或访问一些注入的 类,例如数据库。 (它注入了 AppComponent)。
已经尝试过: https://proandroiddev.com/dagger-2-setup-with-workmanager-a-complete-step-by-step-guild-bb9f474bde37 在 kotlin 中并在 Java 中重写。 - 在项目中不起作用。 (以及 Whosebug 上的所有关闭标题)
还有很多关于 web 的例子相互复制......(它们都是 Kotlin 的......)
我将所有库更新为实际版本,从 3.2.1 更新到 3.4.1,包含所有内容。
使用:AS 3.4.1 | gp:3.4.1 | gv:5.1.1 库:Dagger2、Retrofit2、OkHttp、Gson、ButterKnife、RxJava2、Room、Rabbit、WorkManager。它在 28 sdk 上 有我的工人:
private String TAG = getClass().getSimpleName();
DBModel dbModel; // this is injected room model in appComponent
public UIUpdaterWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
}
@NonNull
@Override
public Result doWork() {
Log.d(TAG, dbModel.toString()); // here is null
return Result.success();
我在同一个组件中尝试过,然后分开。它不会起作用。为 null 或项目未生成。
如您链接的文章中所述,您需要将 WorkManager's custom configuration 与自定义 WorkerFactory 一起使用,将附加参数传递给您的 Worker class:
public class UIUpdaterWorker extends Worker {
private String TAG = getClass().getSimpleName();
public UIUpdaterWorker(
@NonNull Context context,
@NonNull WorkerParameters workerParams,
@NonNull DBModel dbModel
) {
super(context, workerParams);
}
@NonNull
@Override
public Result doWork() {
Log.d(TAG, dbModel.toString());
return Result.success();
}
}
然后您可以用 Dagger 注入它(DBModel
在您的情况下)。
我喜欢 WorkManager 2.1.0-alpha02 中添加的新“DelegatingWorkerFactory”功能(或者您可以自己采用类似的设计)。我制作了一个 PoC(在 Kotlin 中),它创建了一个自定义配置并为需要用 dagger 注入额外参数的特定工作人员注册了一个 WorkerFactory。
您可以在 Plaid branch, Worker and WorkerFactory are here 上找到代码。要为您的具体案例提供更多指导,了解更多背景信息会很有帮助。我可以想象您已经在其他 classes.
中注入了 dbModel您可以在注册自定义 WorkerFactory 时执行相同的操作,注入 dbModel,这样您就可以将其作为参数传递给 Worker class。