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