martes, agosto 29, 2017

Cómo pasar parámetros a un JobService

En mi post anterior expliqué como crear un JobSerivce, este job service recibe parámetros; Para pasar parámetros al JobService usamos la clase PersistableBundle de la siguiente manera.

private void requestAlertsToDelete(int[] alerts) {

   Alerts alertsRequest = Alerts.getAlertsRequest(
         SessionManager.getAuth(getActivity()),
         new int[]{},
         alerts);

   PersistableBundle bundle = new PersistableBundle();

   bundle.putString(Constants.INSTANCE.getREQUEST_PARAMS(), alertsRequest.toJSON());

   JobScheduler jobScheduler = (JobScheduler) getActivity()
                         .getSystemService(Context.JOB_SCHEDULER_SERVICE);

   JobInfo jobInfo = new JobInfo.Builder(0, new ComponentName(getActivity(), AlertJobService.class))
         .setExtras(bundle)
         .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
         .build();

   if (jobScheduler != null) {
      jobScheduler.schedule(jobInfo);
   }


Esta clase acepta tipos básicos, enteros, cadenas de caracteres y algunos otros, pero no Parcelables, por lo tanto lo que hice fue crear en mi clase Alerts un método llamado toJSON() que devuelve la instancia de esa clase a JSON.

Para esto uso la librería Gson, por si acaso les dejo el código también.

public String toJSON() {
   return gs.toJson(this, Alerts.class);
}

la variable gs está definida de forma global de la siguiente manera.
public  final Gson gs = new GsonBuilder().serializeNulls()
      .disableHtmlEscaping()
      .create();

Saludos