Anthony S
Anthony S

Reputation: 53

JobScheduler Won't Run in the Background

I am trying to run an accounting calculator in the background using JobScheduler, but somehow, it won't do the calculation. The program runs smoothly, thats why it confuses me why it doesn't work. I appreciate your help.

Here's my Job Service class:

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public class MyJobService  extends JobService {
private JobParameters params;

int num1a;
int num1b;
int num2a;
int num2b;
int num3a;
int num3b;
int num4a;
int num4b;
int num5a;
int num5b;

int sum1;
int sum2;
int sum3;
int sum4;
int sum5;

SharedPreferences preferences;
SharedPreferences.Editor editor;

@Override
public boolean onStartJob(JobParameters params) {
    this.params = params;
    Toast.makeText(getApplicationContext(), "Start", Toast.LENGTH_LONG).show();
    new MonthlyTask().execute();
    return true;
}

@Override
public boolean onStopJob(JobParameters params) {
    return false;
}

private class MonthlyTask extends AsyncTask<Void, Void, Void> {

    @Override
    protected void onPostExecute(Void xVoid) {
        super.onPostExecute(xVoid);
        jobFinished(params, false);
        Toast.makeText(getApplicationContext(), "Finish", Toast.LENGTH_LONG).show();
    }

    @Override
    protected Void doInBackground(Void... params) {
        preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
        editor = preferences.edit();
        try {
            num1a = preferences.getInt("expense1", 0);
            num1b = preferences.getInt("subtotal1", 0);
            num2a = preferences.getInt("expense2", 0);
            num2b = preferences.getInt("subtotal2", 0);
            num3a = preferences.getInt("expense3", 0);
            num3b = preferences.getInt("subtotal3", 0);
            num4a = preferences.getInt("expense4", 0);
            num4b = preferences.getInt("subtotal4", 0);
            num5a = preferences.getInt("expense5", 0);
            num5b = preferences.getInt("subtotal5", 0);

        } catch (NumberFormatException nfe) {
            nfe.printStackTrace();
        }
        sum1 = num1a + num1b;
        sum2 = num2a + num2b;
        sum3 = num3a + num3b;
        sum4 = num4a + num4b;
        sum5 = num5a + num5b;

        editor.putInt("subtotal1", sum1);
        editor.putInt("subtotal2", sum2);
        editor.putInt("subtotal3", sum3);
        editor.putInt("subtotal4", sum4);
        editor.putInt("subtotal5", sum5);
        return null;
    }
}
}

Here's my Main Activity

    public class MainActivity extends AppCompatActivity implements android.view.View.OnClickListener{
    //Do stuffs
    public void onClick(View view) {
    if (view == findViewById(R.id.btnSave)) {
     JobInfo.Builder builder = new JobInfo.Builder(1, new ComponentName(getPackageName(),
                MyJobService.class.getName()));
        //run job service after every 5 seconds, which put back to 15 mins...but thats fine
        builder.setPeriodic(5000);
        builder.setPersisted(true);
        jobScheduler.schedule(builder.build());
        finish();
    }}

Upvotes: 0

Views: 522

Answers (1)

CommonsWare
CommonsWare

Reputation: 1006839

I am trying to run an accounting calculator in the background using JobScheduler

This example is really strange.

but somehow, it won't do the calculation

Um, well, if by "the calculation", you mean addition, it is doing the addition. However, you then throw away the results. You edit() the SharedPreferences without calling apply() or commit() to save the changes.

Upvotes: 1

Related Questions