How can I store an arraylist of custom objects? How can I store an arraylist of custom objects? sqlite sqlite

How can I store an arraylist of custom objects?


I use a class in a Weather app I'm developing...

public class RegionList extends ArrayList<Region> {} // Region implements Serializeable

To save I use code like this...

FileOutputStream outStream = new FileOutputStream(Weather.WeatherDir + "/RegionList.dat");ObjectOutputStream objectOutStream = new ObjectOutputStream(outStream);objectOutStream.writeInt(uk_weather_regions.size()); // Save size firstfor(Region r:uk_weather_regions)    objectOutStream.writeObject(r);objectOutStream.close();

NOTE: Before I write the Region objects, I write an int to save the 'size' of the list.

When I read back I do this...

FileInputStream inStream = new FileInputStream(f);ObjectInputStream objectInStream = new ObjectInputStream(inStream);int count = objectInStream.readInt(); // Get the number of regionsRegionList rl = new RegionList();for (int c=0; c < count; c++)    rl.add((Region) objectInStream.readObject());objectInStream.close();


You're in luck, all of your class' members are already serialzble so your first step is to say that Lecture is Serializable.

public class Lecture implements Serializable {    public String title;    public String startTime;    public String endTime;    public String day;    public boolean classEnabled;    public Lecture(String title, String startTime, String endTime, String day, boolean enable){        this.title = title;        this.startTime = startTime;        this.endTime = endTime;        this.day = day;        this.classEnabled = enable;    }

Next, you need to make a default constructor since serialization seems to require that. The last thing is you need to write your object out to a file. I usually use something like the following. Note this is for saving a game state so you might not want to use the cache directory.

private void saveState() {    final File cache_dir = this.getCacheDir();     final File suspend_f = new File(cache_dir.getAbsoluteFile() + File.separator + SUSPEND_FILE);    FileOutputStream   fos  = null;    ObjectOutputStream oos  = null;    boolean            keep = true;    try {        fos = new FileOutputStream(suspend_f);        oos = new ObjectOutputStream(fos);        oos.writeObject(this.gameState);    }    catch (Exception e) {        keep = false;        Log.e("MyAppName", "failed to suspend", e);    }    finally {        try {            if (oos != null)   oos.close();            if (fos != null)   fos.close();            if (keep == false) suspend_f.delete();        }        catch (Exception e) { /* do nothing */ }    }}

Reading the data back is pretty symmetric to the write so I have left that out for this answer. Also, there are still a lot of caveats to Serialized objects so I suggest you do some Google searches and read up on Java serialization in general.


You can use:

System.Runtime.Serialization

You can see an example here:Serialization in C#