Android Data Storage
Android Data Storage
Key Considerations
● Storage Options
– Local
● File
● Database
– Remote
● Cloud
● Persistence strategies
– Layered Architecture with Data Access Layer
– Other strategies (e.g. Serialization, ORM)
Layered Architecture
Data Layer
public interface INoteDAO {
@Override
public void save(Hashtable<String, String> attributes) {
// save a single object
}
@Override
public void save(ArrayList<Hashtable<String, String>> objects) {
// save multiple objects
}
@Override
public ArrayList<Hashtable<String, String>> load() {
// load all objects
@Override
public Hashtable<String, String> load(String id) {
// load a single object based upon id
}
}
public class Note {
Business Layer
private INoteDAO dao = null;
private String id;
// declare other attributes
writer.close();
}
}
if(line.equals("[note]")){
obj = new Hashtable<String, String>();
objects.add(obj);
}
else {
String key = line.substring(0, line.indexOf(":"));
String value = line.substring(line.indexOf(":") + 1);
obj.put(key, value);
}
return objects;
}
notes = Note.load(dao);
}
// other UI operations
}
Database
● Sqlite
– Popular embedded database
– Single-file based, efficient, structured storage
– Cross-platform
– Server-less, zero configuration
– Suitable as application file format
– Not very suitable for highly concurrent client-server
architectures
● Android Sqlite support
– SQLiteDatabase and SQLiteOpenHelper
– ContentValues
– Cursor
Data Layer
@Override
public void save(Hashtable<String, String> attributes) {
NotesDbHelper dbHelper = new NotesDbHelper(context);
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.insert("Notes",null,content);
}
// continued...
public ArrayList<Hashtable<String, String>> load() { Data Layer
NotesDbHelper dbHelper = new NotesDbHelper(context);
SQLiteDatabase db = dbHelper.getReadableDatabase();
while(cursor.moveToNext()){
Hashtable<String,String> obj = new Hashtable<String, String>();
String [] columns = cursor.getColumnNames();
for(String col : columns){
obj.put(col.toLowerCase(),
cursor.getString(cursor.getColumnIndex(col)));
objects.add(obj);
}
return objects;
}