gpt4 book ai didi

android - 无法在 WorkManager 的 Worker 类中注入(inject)单例类

转载 作者:太空宇宙 更新时间:2023-11-03 13:09:05 24 4
gpt4 key购买 nike

我正在研究 MVVM 架构,我正在使用 Dagger2 进行数据注入(inject)。我面临的问题是,在 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();

}

最佳答案

在 worker 类中注入(inject)字段首先你需要在 AppComponent 中注入(inject)你的 worker 类:

 fun inject(syncItemWorker: SyncItemWorker)

然后在 worker 的 doWork() 中,你需要调用 inject:

 if(applicationContext is MyApp){
var daggerAppComponent= DaggerAppComponent.builder().application(applicationContext as MyApp).build()
daggerAppComponent.inject(this)
}

关于android - 无法在 WorkManager 的 Worker 类中注入(inject)单例类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50528334/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com