“如何修复”;E/WM SystemJobScheduler:无法调度“;Android WorkManager中PeriodicWorkRequest出错?

“如何修复”;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

我正在尝试使用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)

我做了以下几件事:

  • 添加渐变依赖性
  • 创建了Constraint和PeriodicWorkRequest对象,并使用work manager将请求排队

    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(请求);
    }
    }
    }
    
  • 我希望请求可以工作,但它作为异常抛出

    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(ThreadP