Wednesday, August 8, 2012

How to save custom class object in android Cache?


Create the class MyClass for writing to save object and also for retrieval object........

public class MyClass implements Serializable
{
    private static final long serialVersionUID = 1L;
    public String title;
    public String startTime;
    public String endTime;
    public String day;
    public boolean classEnabled;

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


     public MyClass()
     {
     }

     public boolean saveObject(MyClass obj) {

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

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

            try {
                fos = new FileOutputStream(suspend_f);
                oos = new ObjectOutputStream(fos);
                oos.writeObject(obj);
            }
            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;


        }

     public MyClass getObject(Context c)
     {
         final File suspend_f=new File(SerializationTest.cacheDir, "test");

         MyClass simpleClass= null;
         FileInputStream fis = null;
         ObjectInputStream is = null;
        // boolean            keep = true;

         try {

             fis = new FileInputStream(suspend_f);
             is = new ObjectInputStream(fis);
             simpleClass = (MyClass) is.readObject();
         }catch(Exception e)
         {
            String val= e.getMessage();

         }finally {
                try {
                    if (fis != null)   fis.close();
                    if (is != null)   is.close();

                }
                catch (Exception e) { }
            }

         return simpleClass;
     }
}

And from any of the Activity you can call the above class to save object......

if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED))
            cacheDir=new File(android.os.Environment.getExternalStorageDirectory(),"MyCustomObject");
        else
            cacheDir= getCacheDir();
        if(!cacheDir.exists())
            cacheDir.mkdirs();




       MyClass m= new MyClass( "umer", "asif", true);

          boolean  result =m.saveObject(m);

      if(result)
        Toast.makeText(this, "Saved object", Toast.LENGTH_LONG).show();
      else
          Toast.makeText(this, "Error saving object", Toast.LENGTH_LONG).show();

        MyClass m= new MyClass();
        MyClass c = m.getObject(this);
        if(c!= null)
            Toast.makeText(this, "Retrieved object", Toast.LENGTH_LONG).show();
        else
            Toast.makeText(this, "Error retrieving object", Toast.LENGTH_LONG).show();

}

Dont forget to use write_external_storage permissions in manifest file.And dont use context in it otherwise nonserializable exception will be raised.

No comments:

Post a Comment