“如何修复”;E/WM SystemJobScheduler:无法调度“;Android WorkManager中PeriodicWorkRequest出错?
我正在尝试使用Android x库在Android中使用工作管理器设置PeriodicWorkRequest。但每次我都会得到以下例外 E/WM SystemJobScheduler:无法调度{WorkSpec:8fc2b535-4869-438b-b44e-54e1b4b3507c} java.lang.IllegalArgumentException:没有这样的服务组件信息{in.dharmalife.dlone/androidx.work.impl.background.systemjob.SystemJobService} 在android.os.Parcel.createException(Parcel.java:1970)中 在android.os.Parcel.readException(Parcel.java:1934) 在android.os.Parcel.readException(Parcel.java:1884) 位于android.app.job.IJobScheduler$Stub$Proxy.schedule(IJobScheduler.java:184) 在android.app.JobSchedulerImpl.schedule上(JobSchedulerImpl.java:44) 位于androidx.work.impl.background.systemjob.SystemJobScheduler.scheduleInternal(SystemJobScheduler.java:182) 位于androidx.work.impl.background.systemjob.SystemJobScheduler.schedule(SystemJobScheduler.java:128) 位于androidx.work.impl.Schedulers.schedule(Schedulers.java:92) 位于androidx.work.impl.utils.EnqueueRunnable.scheduleWorkInBackground(EnqueueRunnable.java:132) 位于androidx.work.impl.utils.EnqueueRunnable.run(EnqueueRunnable.java:93) 位于androidx.work.impl.utils.SerialExecutor$Task.run(SerialExecutor.java:91) 位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 运行(Thread.java:764) 我做了以下几件事:“如何修复”;E/WM SystemJobScheduler:无法调度“;Android WorkManager中PeriodicWorkRequest出错?,android,androidx,android-workmanager,periodic-task,Android,Androidx,Android Workmanager,Periodic Task,我正在尝试使用Android x库在Android中使用工作管理器设置PeriodicWorkRequest。但每次我都会得到以下例外 E/WM SystemJobScheduler:无法调度{WorkSpec:8fc2b535-4869-438b-b44e-54e1b4b3507c} java.lang.IllegalArgumentException:没有这样的服务组件信息{in.dharmalife.dlone/androidx.work.impl.background.systemjob
public static void storeAttendanceData(Context context, @NotNull AttendanceModel attendanceModel) {
Constraints myConstraints = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build();
PeriodicWorkRequest workRequest = new PeriodicWorkRequest.Builder(AttendanceWorker.class, 1, TimeUnit.HOURS)
.setConstraints(myConstraints)
.build();
WorkManager.getInstance(context).enqueueUniquePeriodicWork("Attendance Worker", ExistingPeriodicWorkPolicy.REPLACE, workRequest);
}
public class AttendanceWorker extends Worker {
SessionManager sessionManager;
public AttendanceWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
sessionManager = new SessionManager(context);
}
@NonNull
@Override
public Result doWork() {
makeAttendanceRequest();
return Result.success();
}
private void makeAttendanceRequest() {
final AttendanceDao attendanceDao =
AppDatabase.getDatabase(getApplicationContext()).getAttendanceDao();
if (attendanceDao.getAllAttendance() != null && attendanceDao.getAllAttendance().length > 0) {
final String attendanceData = new Gson().toJson(attendanceDao.getAllAttendance());
Log.e("Complete Attendance ", attendanceData);
JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, Urls.UPLOAD_ATTENDANCE, attendanceData, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.e("Attendance Worker -- > ", response.toString());
Type type = new TypeToken<List<AttendanceModel>>() {
}.getType();
ArrayList<AttendanceModel> apiLogsList = new Gson().fromJson(attendanceData, type);
attendanceDao.deleteAllLogs(apiLogsList);
Log.e("After Delete Worker--> ", new Gson().toJson(attendanceDao.getAllAttendance()));
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
}) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> headers = new HashMap<>();
headers.put("Authorization", "JWT " + sessionManager.getSessionToken());
headers.put("lang", sessionManager.getLanguageId() + "");
headers.put("language", sessionManager.getSelectedLanguage());
headers.put("ipAddress", Utils.getLocalIpAddress());
Log.e("Attendance Headers ", headers.toString());
return headers;
}
};
request.setRetryPolicy(new DefaultRetryPolicy(30000, 0, 0));
AppController.getInstance().addToRequestQueue(request);
}
}
}
公共静态无效存储AttendanceData(上下文上下文,@NotNull AttendanceModel AttendanceModel){
约束myConstraints=new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build();
PeriodicWorkRequest workRequest=新建PeriodicWorkRequest.Builder(AttendanceWorker.class,1,TimeUnit.HOURS)
.setConstraints(myConstraints)
.build();
WorkManager.getInstance(context).enqueueUniquePeriodicWork(“考勤工”,ExistingPeriodicWorkPolicy.REPLACE,workRequest);
}
公共课上勤工{
会话管理器会话管理器;
公共AttendanceWorker(@NonNull上下文上下文,@NonNull WorkerParameters workerParams){
超级(上下文、工作参数);
sessionManager=新的sessionManager(上下文);
}
@非空
@凌驾
公共成果工作(){
makeAttensequest();
返回Result.success();
}
私有无效请求(){
最终出席人数出席人数=
AppDatabase.getDatabase(getApplicationContext()).getAttendanceDao();
if(attendanceDao.getAllAttendance()!=null&&attendanceDao.getAllAttendance().length>0){
最后一个字符串attendanceData=new Gson().toJson(attendanceDao.getAllAttentince());
Log.e(“完全出勤”,attendanceData);
JsonObjectRequest request=新的JsonObjectRequest(request.Method.POST,url.UPLOAD\u Attention,attendanceData,new Response.Listener()){
@凌驾
公共void onResponse(JSONObject响应){
Log.e(“考勤工-->”,response.toString();
Type Type=new-TypeToken(){
}.getType();
ArrayList apiLogsList=new Gson().fromJson(attendanceData,类型);
attendanceDao.deleteAllLogs(apiLogsList);
Log.e(“在删除Worker-->”之后,新的Gson().toJson(attendanceDao.getAllAttendence());
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
错误。printStackTrace();
}
}) {
@凌驾
公共映射getHeaders()引发AuthFailureError{
Map headers=newhashmap();
headers.put(“Authorization”,“JWT”+sessionManager.getSessionToken());
headers.put(“lang”,sessionManager.getLanguageId()+”);
headers.put(“language”,sessionManager.getSelectedLanguage());
headers.put(“ipAddress”,Utils.getLocalIpAddress());
Log.e(“考勤头”,Headers.toString());
返回标题;
}
};
setRetryPolicy(新的DefaultRetryPolicy(30000,0,0));
AppController.getInstance().addToRequestQueue(请求);
}
}
}