Samantha Withanage
Samantha Withanage

Reputation: 3851

Android NotSerializableException raises for an object

In my android application I use a file to store license data. And I uses Serialize objects. I create a Device object and read the file details in to the object. Device class implements Serializable.

public class MyDevice implements Serializable {}

But at the start of application it deserialize and store in a MyDevice object. My deserializeObject method is as below.

public MyDevice deserializeObject() {

    File SerialFile = new File(GeoTrackerPaths.FILE_PATH);
    MyDevice AndDeviceIn = new MyDevice();

    if (SerialFile.exists()) {
        try {
            FileInputStream fileIn = new FileInputStream(GeoTrackerPaths.FILE_PATH);
            ObjectInputStream objInput = new ObjectInputStream(fileIn);
            AndDeviceIn = (MyDevice) objInput.readObject();
            objInput.close();
            fileIn.close();

        } catch (Exception e) {

            Log.i("TAG", "Exception during deserialization:" + e.getMessage());
            e.printStackTrace();
            System.exit(0);
        }
    }

    return AndDeviceIn;
}

My serialization code

public void serializeObject(Context context, String phoneModel,
        String androidVersion, String executiveCode, String Key,
        String modelID, String tempKey, int noLogin, String expireDate, String Status) {

    try {
        MyDevice AndDeviceOut = new MyDevice(context, phoneModel,
                androidVersion, new Date(), executiveCode, Key, modelID,
                tempKey, noLogin, expireDate, Status);

        FileOutputStream fileOut = new FileOutputStream(
                GeoTrackerPaths.FILE_PATH);
        ObjectOutputStream objOutput = new ObjectOutputStream(fileOut);
        objOutput.writeObject(AndDeviceOut);
        objOutput.flush();
        objOutput.close();
        fileOut.close();

    } catch (Exception e) {
        Log.i("TAG", "Exception during serialization:" + e.getMessage());
        e.printStackTrace();
        System.exit(0);
    }
}

And I'm calling it as below.

DeviceActivator activate=new DeviceActivator();
activate.serializeObject(Activation.this, phoneModel, androidVersion, txtExe, exeKey, modeilID, tempKey, noLogin, expireDate, Activation_Status);

when I'm running the app following exceptions are raised.

java.io.WriteAbortedException: Read an exception; 
java.io.NotSerializableException: com.geotracker.entity.MyDevice

How can I fix this?

Upvotes: 5

Views: 1191

Answers (1)

Durandal
Durandal

Reputation: 5663

It doesn't look like the Android Context object is serializable. You can solve this by declaring the Context object as transient, which you can read about in here in the JDK spec: Link. Basically marking a field as transient means it won't participate in Serialization

So declare your field like this in MyDevice :

private transient Context context;

and you should be good to go!

Upvotes: 4

Related Questions