Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

java.io.NotSerializableException while writing Serializable object to external storage?

friends,

i am using following code to write Serializable object to external storage.

it throws me error java.io.NotSerializableException even my object is serializable any one guide me what mistake am i doing?

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;


        }

}

and calling from activity class to save it

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

any help would be appreciated.

like image 823
UMAR-MOBITSOLUTIONS Avatar asked Dec 29 '10 06:12

UMAR-MOBITSOLUTIONS


People also ask

How do you make an object variable serializable in Java?

To make a Java object serializable you implement the java. io. Serializable interface. This is only a marker interface which tells the Java platform that the object is serializable.

Are all Java objects serializable?

In other words: all classes you ever create, were or will be created are all serializable.


1 Answers

This fails due to the Context field in your class. Context objects are not serializable.

Per the Serializable documentation - "When traversing a graph, an object may be encountered that does not support the Serializable interface. In this case the NotSerializableException will be thrown and will identify the class of the non-serializable object."

You can either remove the Context field entirely, or apply the transient attribute to the Context field so that it is not serialized.

public class MyClass implements Serializable 
{
    ...
    public transient Context myContext;
    ...
}
like image 193
JesusFreke Avatar answered Oct 07 '22 11:10

JesusFreke