Не удается создать обработчик внутри потока, который не вызвал Looper.prepare () в JobService - PullRequest
0 голосов
/ 06 ноября 2018

Я добавляю JobService в свое приложение, используя который мне нужно получать доступ к API каждые 2 часа.

Я добавил приведенный ниже код JobService и запланировал его в своей SplashActivity, где у меня есть функция API для получения данных с сервера, но она выдает эту ошибку.

Пожалуйста, помогите. Я не могу понять, как я могу использовать этот API с помощью JobService.

MyJobService:

      public class MyJobService extends JobService {
private static final String TAG = MyJobService.class.getSimpleName();
boolean isWorking = false;
public boolean jobCancelled = false;

// Called by the Android system when it's time to run the job
@Override
public boolean onStartJob(JobParameters jobParameters) {
    Log.d(TAG, "Job started!");
    isWorking = true;
    // We need 'jobParameters' so we can call 'jobFinished'
    startWorkOnNewThread(jobParameters); // Services do NOT run on a separate thread

    return isWorking;
}

private void startWorkOnNewThread(final JobParameters jobParameters) {
    new Thread(new Runnable() {
        public void run() {
            doWork(jobParameters);
        }
    }).start();
}

private void doWork(JobParameters jobParameters) {
    // 10 seconds of 'working' (1000*10ms)

    new SplashActivity().productsDetailsApi();


    Log.d(TAG, "Job finished!");
    isWorking = false;
    boolean needsReschedule = false;
    jobFinished(jobParameters, needsReschedule);
}

// Called if the job was cancelled before being finished
@Override
public boolean onStopJob(JobParameters jobParameters) {
    Log.d(TAG, "Job cancelled before being completed.");
    jobCancelled = true;
    boolean needsReschedule = isWorking;
    jobFinished(jobParameters, needsReschedule);
    return needsReschedule;
}


}

SplashActivity:

    ComponentName componentName = new ComponentName(this, MyJobService.class);
    JobInfo jobInfo = new JobInfo.Builder(12, componentName)
            .setRequiresCharging(true)
            .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
            .setPeriodic(120000)
            .build();

    JobScheduler jobScheduler = (JobScheduler)getSystemService(JOB_SCHEDULER_SERVICE);
    int resultCode = jobScheduler.schedule(jobInfo);
    if (resultCode == JobScheduler.RESULT_SUCCESS) {
        Log.d("TAG", "Job scheduled!");
    } else {
        Log.d("TAG", "Job not scheduled");
    }
...