I have created a class – SerializationManager, it can serialize any objects and write them to files. It can be used to save and restore form states in Android. It is based on Java Generics. What is achieved by this is that you do not need to duplicate serialization code in every class.
Object must implement Serialized interface. Here form is an object instance of a class. It can be named as just obj.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
package com.alwawee.util; import android.content.Context; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; public class SerializationManager<T> { //================================================================================ // Constructor //================================================================================ public SerializationManager(){ } //================================================================================ // Other //================================================================================ // Reads saved object from a file. Object must implement Serialized interface. public T readObjectFromFile(Context context, String className) { T form = null; try { String fileName = className + ".ser"; FileInputStream fileInputStream = context.openFileInput(fileName); ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream); form = (T) objectInputStream.readObject(); objectInputStream.close(); fileInputStream.close(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } return form; } // Serializes object and saves it to a file. File name is created using object type (class name). public void saveObjectToFile(Context context, T form) { try { String fileName = form.getClass().getSimpleName() + ".ser"; FileOutputStream fileOutputStream = context.openFileOutput(fileName, Context.MODE_PRIVATE); ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream); objectOutputStream.writeObject(form); objectOutputStream.close(); fileOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } |
This is how you can use it. First you declare a SerializationManager in your class and you tell it which class you are going to serialize:
1 |
private SerializationManager<CreateResumeForm> manager; |
Then in onCreate method you create SerializationManager instance:
1 2 3 |
@Override protected void onCreate(Bundle savedInstanceState) { manager = new SerializationManager<CreateResumeForm>(); |
Writing object to a file:
1 2 |
// Saving to a file manager.saveObjectToFile(this, form); |
Reading objects from saved file:
1 2 |
// Reading form object from a file form = manager.readObjectFromFile(this, "CreateResumeForm"); |