0

My application runs fine with my android api level 23 , when I tried to run it on another android api level 19 the app crashes when begin to launch and error message says

(java.lang.NoClassDefFoundError:com.notifyuser.peter.notify.PrefService )appeared.

my app has jobservice class which is handled by job schedular, the error refer to line which has componentname class, when I remove the componentname and job schedular, everything works fine.

I searched for a solution but nothing works.

here is my code for jobschedular

 public void scheduleAlarm() {

    ComponentName componentName=new ComponentName(getActivity(),MyService.class);
    JobInfo info=new JobInfo.Builder(0,componentName)
            .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
            .setRequiresDeviceIdle(false)
            .setPersisted(true)
            .build();

    scheduler = (JobScheduler) getActivity().getSystemService(JOB_SCHEDULER_SERVICE);
    int resultCode=scheduler.schedule(info);
    if (resultCode==JobScheduler.RESULT_SUCCESS){
        Log.d(TAG,"job scheduled");
    }else{
        Log.d(TAG,"failed");
    }

}

here is my error

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.notifyuser.peter.notify, PID: 28016
java.lang.NoClassDefFoundError: com.notifyuser.peter.notify.MyService
    at com.notifyuser.peter.notify.MoviesListFragment.scheduleAlarm(MoviesListFragment.java:119)
    at com.notifyuser.peter.notify.MoviesListFragment.onCreateView(MoviesListFragment.java:182)
    at android.support.v4.app.Fragment.performCreateView(Fragment.java:2439)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1460)
    at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
    at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:802)
    at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625)
    at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411)
    at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366)
    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)
    at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3273)
    at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3229)
    at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:201)
    at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:620)
    at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:178)
    at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1174)
    at android.app.Activity.performStart(Activity.java:5274)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2311)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)
    at android.app.ActivityThread.access$800(ActivityThread.java:151)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321)
    at android.os.Handler.dispatchMessage(Handler.java:110)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:5292)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
    at dalvik.system.NativeStart.main(Native Method)
  • check [this](https://github.com/googlearchive/android-JobScheduler/issues/2), JobScheduler is available on api >=21 – Mohammed Alaa Feb 08 '20 at 12:19
  • yes, I know that, but how can I prevent the error, I tried surround my code with try\catch , but still get the same error. – peter Estifanos Feb 08 '20 at 12:27
  • 1
    this is not a fix to the problem, in this way your code will not run on api<21 and run on api>=21, you could search for other alternative if you want your app to run in api<21,check this [thread](https://stackoverflow.com/questions/28563543/using-job-scheduler-in-android-api-21) for alternatives – Mohammed Alaa Feb 08 '20 at 12:36
  • Please show how you tried to catch the exception, then we may be able to provide better help. – Stefan Feb 08 '20 at 13:09
  • Can I check if the api level higher than 21, so call the jobschedular. I think that will save APIs lower than 21 from crash. – peter Estifanos Feb 08 '20 at 13:12
  • 1
    @peter Estafanos yes you can , check [this](https://developer.android.com/training/basics/supporting-devices/platforms) – Mohammed Alaa Feb 08 '20 at 13:16

0 Answers0