Android NotSerializableException为对象引发

时间:2014-01-13 06:06:48

标签: java android serialization

在我的 android 应用程序中,我使用文件存储许可证数据。我使用序列化对象。我创建了一个设备对象,并将文件详细信息读入该对象。 设备类实现Serializable

public class MyDevice implements Serializable {}

但是在应用程序开始时,反序列化并存储在MyDevice对象中。我的 deserializeObject 方法如下所示。

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;
}

我的序列化代码

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);
    }
}

我将其称为以下内容。

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

当我运行应用程序时,会引发异常。

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

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

看起来Android Context对象不可序列化。您可以通过将Context对象声明为瞬态来解决此问题,您可以在JDK规范中阅读此内容:Link。基本上将字段标记为瞬态意味着它不会参与序列化

因此,请在MyDevice

中声明您的字段

private transient Context context;

你应该好好去!