【发布时间】:2018-05-25 11:37:38
【问题描述】:
我正在研究 MVVM 架构,并且正在使用 Dagger2 进行数据注入。我面临的问题是,在 Activity/Fragments 中,@Inject 工作正常,但在 WorkManager 的 Worker 类中,@Inject 在运行时给出空指针异常。我该如何解决?
以下是Worker类代码:
public class MySyncManager extends Worker {
@Inject
DataManager dataManager;
@Inject
SchedulerProvider schedulerProvider;
@NonNull
@Override
public WorkerResult doWork() {
CommonUtils.Log("usm_work_manager_1", "Work is Started.");
if(dataManager==null)
CommonUtils.Log("usm_work_manager", "Injector is NULL");
}
}
方法:
private void startTestSyncRequest() {
Constraints myConstraints = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build();
OneTimeWorkRequest workRequest = new OneTimeWorkRequest.Builder(MySyncManager.class)
.setConstraints(myConstraints)
.setInitialDelay(1, TimeUnit.SECONDS) // wait for n seconds before starting service
.build();
WorkManager.getInstance()
.beginUniqueWork(Tags.TEST_WORK_NAME, ExistingWorkPolicy.REPLACE, workRequest)
.enqueue();
}
【问题讨论】:
-
你在哪里打电话给
myComponent.inject(mySyncManager)?请包含您注入工作人员的代码。 -
@DavidMedenjak,我没有注入 WorkManager,我只是调用上面的方法来 startWorker,因为它有一些可变规则,可能会因不同的请求而异。
-
如果你不注入字段,它们将是
null,所以你必须在使用它之前以某种方式注入它。您必须手动执行此操作 -
但是我试图在 Worker 中注入的模型被添加到 AppModule 中,它在其他地方也可以正常工作,即活动或片段。对我来说,这似乎是线程特定的问题,但我不确定。
标签: android dependency-injection dagger-2 android-workmanager