Java.io.NotSerializableException при записи объекта Serializable во внешнее хранилище?

друзья

Я использую следующий код для записи объекта Serializable во внешнее хранилище.

он выдает мне ошибку java.io.NotSerializableException даже мой объект сериализуем, какой-нибудь один мне подскажет, какую ошибку я делаю?

public class MyClass implements Serializable 
{

// other veriable stuff here...
    public String title;
    public String startTime;
    public String endTime;
    public boolean classEnabled;
    public Context myContext;

 public MyClass(Context context,String title, String startTime, boolean enable){
            this.title = title;
            this.startTime = startTime;
            this.classEnabled = enable;
            this.myContext = context;

}

 public boolean saveObject(MyClass obj) {

        final File suspend_f=new File(cacheDir, "test");

            FileOutputStream   fos  = null;
            ObjectOutputStream oos  = null;
            boolean            keep = true;

            try {
                fos = new FileOutputStream(suspend_f);
                oos = new ObjectOutputStream(fos);
                oos.writeObject(obj);   // exception throws here
            }
            catch (Exception e) {
                keep = false;


            }
            finally {
                try {
                    if (oos != null)   oos.close();
                    if (fos != null)   fos.close();
                    if (keep == false) suspend_f.delete();
                }
                catch (Exception e) { /* do nothing */ }
            }


            return keep;


        }

}

и вызов из класса активности для его сохранения

 MyClass m= new MyClass(this, "hello", "abc", true);
 boolean  result =m.saveObject(m);

любая помощь будет оценена.

Ответы

Ответ 1

Это не удается из-за поля Context в вашем классе. Контекстные объекты не могут быть сериализованы.

В Документация по Serializable -" При перемещении графика может возникнуть объект, который не поддерживает интерфейс Serializable. В этом случае исключение NotSerializableException будет выбрано и будет идентифицировать класс несериализуемого объекта.

Вы можете полностью удалить поле Контекст или применить переходный атрибут к полю контекста, чтобы он не был сериализован.

public class MyClass implements Serializable 
{
    ...
    public transient Context myContext;
    ...
}