Ссылка на нулевой объект для jobFinisced - PullRequest
0 голосов
/ 15 мая 2018

Я создаю приложение с помощью JobService.Этот JobService должен запускать службу каждые 1 минуту.

Это мой класс JobService:

public class BleJobService extends JobService {
    JobParameters params;
    DoItTask doIt;
    @Override
    public boolean onStartJob(JobParameters jobParameters) {
        this.params = params;
        Log.d("TestService", "Work to be called from here");
        startService(new Intent(this, BlePowerService_JobScheduler.class));

        /*doIt = new DoItTask();
        doIt.execute();*/
        jobFinished(params, false);
        return true;
    }

    @Override
    public boolean onStopJob(JobParameters jobParameters) {
        Log.d("TestService", "System calling to stop the job here");
        if (doIt != null)
            doIt.cancel(true);
        return false;
    }

    private class DoItTask extends AsyncTask<Void, Void, Void> {
        @Override
        protected void onPostExecute(Void aVoid) {
            Log.d("DoItTask", "Clean up the task here and call jobFinished...");

            jobFinished(params, false);
            super.onPostExecute(aVoid);
        }

        @Override
        protected Void doInBackground(Void... params) {
            Log.d("DoItTask", "Working here...");
            return null;
        }
    }
}

Но если я пытаюсь запустить этот JobService, у меня появляется эта ошибка:

FATAL EXCEPTION: main
                  Process: com.eresult.diabesitycare.devicesensor, PID: 15938
                  java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.job.IJobCallback android.app.job.JobParameters.getCallback()' on a null object reference
                      at android.app.job.JobService$JobHandler.handleMessage(JobService.java:161)
                      at android.os.Handler.dispatchMessage(Handler.java:102)
                      at android.os.Looper.loop(Looper.java:154)
                      at android.app.ActivityThread.main(ActivityThread.java:6776)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1496)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1386)

Проблема в этой строке кода:

 jobFinished(params, false);

params is null

1 Ответ

0 голосов
/ 15 мая 2018

this.params = params (если params не откуда-то еще) - это самостоятельное назначение.

Учитывая тот факт, что он изначально не был создан, ссылка остается null, и, следовательно, NPE.

Вы, вероятно, имеете в виду

this.params = jobParameters;
...