[英]How to get a Room Database ViewModel instance inside WorkManager?
I am newbie in Android development.我是 Android 开发的新手。 I am failing to get the room db viewmodel which extends AndroidViewModel inside WorkManager .我无法获得在 WorkManager 中扩展 AndroidViewModel 的房间数据库视图模型。 I want to get a viewmodel class instance to do insert inside room db.我想获得一个视图模型 class 实例来插入房间数据库。
AppAdViewModel.class AppAdViewModel.class
public class AppAdViewModel extends AndroidViewModel {
private AppAdRepository appAdRepository;
public AppAdViewModel(@NonNull Application application) {
super(application);
appAdRepository = new AppAdRepository(application);
}
public void insert(AppAdModel appAdModel){
appAdRepository.insertAd(appAdModel);
}
}
MyBackgroundWorker.class MyBackgroundWorker.class
public class AppDataSyncingworker extends Worker{
private Context context;
private AppAdViewModel appAdViewModel;
public AppDataSyncingworker(@NonNull Context context, @NonNull WorkerParameters workerParams){
super(context, workerParams);
}
@NonNull
@Override
public Result doWork() {
this.context = getApplicationContext();
// error on this line
this.appAdViewModel = new ViewModelProvider((AppCompatActivity)context).get(AppAdViewModel.class);
return null;
}
The error it's showing is:它显示的错误是:
java.util.concurrent.ExecutionException: java.lang.ClassCastException: android.app.Application cannot be cast to androidx.appcompat.app.AppCompatActivity
at androidx.work.impl.utils.futures.AbstractFuture.getDoneValue(AbstractFuture.java:516)
at androidx.work.impl.utils.futures.AbstractFuture.get(AbstractFuture.java:475)
at androidx.work.impl.WorkerWrapper$2.run(WorkerWrapper.java:298)
at androidx.work.impl.utils.SerialExecutor$Task.run(SerialExecutor.java:91)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
Caused by: java.lang.ClassCastException: android.app.Application cannot be cast to androidx.appcompat.app.AppCompatActivity
Any help or guide what i am doing wrong?任何帮助或指导我做错了什么?
Calling getApplicationContext() should not be the preferred way of getting the Context.调用 getApplicationContext() 不应该是获取 Context 的首选方式。 public constructor of Worker takes a Context as the first parameter. Worker 的公共构造函数将 Context 作为第一个参数。 You can use that你可以用那个
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.