0

I need to serialize a collection of Strings for the JobQueue. How do I do that? Using HashSet<String> causes an exception. I am using https://github.com/path/android-priority-jobqueue (there is no hashtag for it here)

error while serializing object PersistNotificationSettingsJob
 java.io.NotSerializableException: com.mycompanyandroid.Application
     at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1344)
     at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1651)
     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1497)
     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1461)
     at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:959)
     at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:360)
     at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1054)
     at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1384)
     at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1651)
     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1497)
     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1461)
     at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:959)
     at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:360)
     at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1054)
     at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1384)
     at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1651)
     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1497)
     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1461)
     at com.path.android.jobqueue.persistentQueue.sqlite.SqliteJobQueue$JavaSerializer.serialize(SqliteJobQueue.java:347)
     at com.path.android.jobqueue.persistentQueue.sqlite.SqliteJobQueue.safeSerialize(SqliteJobQueue.java:324)
     at com.path.android.jobqueue.persistentQueue.sqlite.SqliteJobQueue.getSerializeBaseJob(SqliteJobQueue.java:319)
     at com.path.android.jobqueue.persistentQueue.sqlite.SqliteJobQueue.bindValues(SqliteJobQueue.java:75)
     at com.path.android.jobqueue.persistentQueue.sqlite.SqliteJobQueue.insert(SqliteJobQueue.java:59)
     at com.path.android.jobqueue.cachedQueue.CachedJobQueue.insert(CachedJobQueue.java:26)
     at com.path.android.jobqueue.JobManager.addJob(JobManager.java:499)
     at com.path.android.jobqueue.JobManager$4.run(JobManager.java:565)
     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)
     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
     at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:152)
     at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:265)
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
     at java.lang.Thread.run(Thread.java:818)
Katedral Pillon
  • 14,534
  • 25
  • 99
  • 199

1 Answers1

1

You are trying to serialize the Application class which is not serializable. Make it transient and acquire from somewhere while your job is running. You can also obtain it from job#getApplicationContext. http://yigit.github.io/android-priority-jobqueue/javadoc/index.html

yigit
  • 37,683
  • 13
  • 72
  • 58