yigit/android-priority-jobqueue

Cannot save job to disk too

zhujin001032 opened this issue · 3 comments

Please help me, Thanks!
Error message:
E/AndroidRuntime: FATAL EXCEPTION: job-manager
Process: com.vuspex.contractor.dev, PID: 28302
java.lang.RuntimeException: cannot save job to disk
at com.birbit.android.jobqueue.persistentQueue.sqlite.SqliteJobQueue.persistJobToDisk(SqliteJobQueue.java:107)
at com.birbit.android.jobqueue.persistentQueue.sqlite.SqliteJobQueue.insert(SqliteJobQueue.java:90)
at com.birbit.android.jobqueue.cachedQueue.CachedJobQueue.insert(CachedJobQueue.java:29)
at com.birbit.android.jobqueue.JobManagerThread.handleAddJob(JobManagerThread.java:143)
at com.birbit.android.jobqueue.JobManagerThread.access$100(JobManagerThread.java:35)
at com.birbit.android.jobqueue.JobManagerThread$1.handleMessage(JobManagerThread.java:228)
at com.birbit.android.jobqueue.messaging.PriorityMessageQueue.consume(PriorityMessageQueue.java:39)
at com.birbit.android.jobqueue.JobManagerThread.run(JobManagerThread.java:222)
at java.lang.Thread.run(Thread.java:762)
Caused by: java.io.NotSerializableException: com.vuspex.contractor.common.ScheduleInspectionJob$1
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1224)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1584)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1549)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1472)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1218)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
at com.birbit.android.jobqueue.persistentQueue.sqlite.SqliteJobQueue$JavaSerializer.serialize(SqliteJobQueue.java:493)
at com.birbit.android.jobqueue.persistentQueue.sqlite.SqliteJobQueue.persistJobToDisk(SqliteJobQueue.java:105)
at com.birbit.android.jobqueue.persistentQueue.sqlite.SqliteJobQueue.insert(SqliteJobQueue.java:90) 
at com.birbit.android.jobqueue.cachedQueue.CachedJobQueue.insert(CachedJobQueue.java:29) 
at com.birbit.android.jobqueue.JobManagerThread.handleAddJob(JobManagerThread.java:143) 
at com.birbit.android.jobqueue.JobManagerThread.access$100(JobManagerThread.java:35) 
at com.birbit.android.jobqueue.JobManagerThread$1.handleMessage(JobManagerThread.java:228) 
at com.birbit.android.jobqueue.messaging.PriorityMessageQueue.consume(PriorityMessageQueue.java:39) 
at com.birbit.android.jobqueue.JobManagerThread.run(JobManagerThread.java:222) 
at java.lang.Thread.run(Thread.java:762) 
D

This is my Job class:

public class ScheduleInspectionJob extends Job {

transient private Appointments appointments;
transient private String upload_link_secure;
transient private String complete_uri;
transient private String location = "";

transient private ArrayList<PhotoVideo> videoArrayList;
transient private ArrayList<PhotoVideo> photoArrayList;
transient private ArrayList<PhotoVideo> uploadedArrayList;
transient public int photoTotal;
transient public int videoTotal;
transient public int photoFailTotal = 0;
transient public int photoSuccessTotal = 0;
transient public int videoSuccessTotal = 0;
public int appointmentsId;


public ScheduleInspectionJob(int appointmentsId) {
    super(new Params(1).persist().requireNetwork().groupBy("appointments"));
    this.appointmentsId = appointmentsId;
}

@Override
public void onAdded() {
    //job has been secured to disk, add item to database
}

@Override
public void onRun() throws Throwable {
        //query from database
        this.appointments = Appointments.queryAppointmentsWithApId(appointmentsId);
        photoTotal = 0;
        videoTotal = 0;
        photoFailTotal = 0;
        photoSuccessTotal = 0;
        videoSuccessTotal = 0;
        upload_link_secure = "";
        complete_uri = "";
        location = "";

        videoArrayList = new ArrayList<>();
        photoArrayList = new ArrayList<>();
        uploadedArrayList = new ArrayList<>();
        ......... ........

}

This is strange.
Do you have any other field in your ScheduleInspectionJob which is not declared as transient other than appointmentsId?

Thanks for you reply, I'am sure only the appointmentsId filed not declared as transient.

I guess you have anonymous inner class ScheduleInspectionJob $1 in your ScheduleInspectionJob which is not serializable. You can refer this stackoverflow question to investigate more. https://stackoverflow.com/a/32411875/1282812