Dokumen tersebut membahas tentang penyimpanan data pada aplikasi Android menggunakan beberapa metode seperti SharedPreferences untuk menyimpan data tipe kunci-nilai, file system untuk menyimpan berkas, dan database SQLite menggunakan ORMLite untuk menyimpan data terstruktur. Terdapat contoh kode lengkap untuk menerapkan ketiga metode penyimpanan data tersebut pada aplikasi catatan sederhana.
1. Praktikum ANDROID
ANDROID
FOR
BEGINNER MODUL 8
!
[ANDROID SAVING DATA]
!!!!!
SUDARYATNO
yatnosudar@gmail.com | @dodulz | facebook : yatno.sudar
Page 1" of "15
2. Praktikum ANDROID
ANDROID SAVING DATA
!
Kadang aplikasi yang kita buat membutuhkan media penyimpanan data. Tujuan dari media ini
adalah menyimpan data yang barus saja kita buat di aplikasi kita. Contoh, GAME untuk
menyimpan Score, Note untuk menyimpan note, Galleri untuk menyimpan gambar dsb. Android
memiliki beberapa media penyimpanan data. Media penyimpanan data ini dapat digunakan
sesuai dengan kebutuhan dari aplikasi kita.
!
1. Saving Key-Value Set
Saving Key-Value digunakan untuk menyimpan data yang bersifat collectioin key dan value.
Contoh : key = Score value = 100, key = username value = nina dsb. Untuk menggunakan fitur ini
kita menggunakan class SharedPreferences.
!
a. Deklarasi SharePreferences
Code berikut digunakan untuk mendeklarasi SharePreferences
b. Menulis SharePreferences
Code diatas digunakan untuk menyimpan collection save preferences. code putInt() digunakan
untuk mendeklarasikan collection yang akan disimpan. Dan commit digunakan untuk menyimpan
data.
c. Membaca SharePreferences
!
Page 2" of "15
Context context = getActivity();!
SharedPreferences sharedPref = context.getSharedPreferences(!
getString(R.string.preference_file_key), Context.MODE_PRIVATE);
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);!
SharedPreferences.Editor editor = sharedPref.edit();!
editor.putInt(getString(R.string.saved_high_score), newHighScore);!
editor.commit();
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);!
int defaultValue = getResources().getInteger(R.string.saved_high_score_default);!
long highScore = sharedPref.getInt(getString(R.string.saved_high_score), defaultValue);
3. Praktikum ANDROID
2. Saving Files
Data disimpan dalam bentuk file, data yang disimpan bisa ke dua tujuan. Yaitu internal storage
dan external storage. Berikut ini adalah kelebihan dan kekurangan di masing-masing
penyimpanan :
Jika anda menggunakan external storage sebagai media penyimpanan anda perlu
menambahkan permission di AndroidManifest.xml :
Code berikut digunakan untuk menyimpan file di internal storage :
Code berikut digunakan untuk menyimpan cache
Page 3" of "15
Internal Storage ! !
Penyimpanan selalu tersedia!
File hanya bisa diakses oleh apps
anda!
Ketika aplikasi di uninstall data
anda akan hillang
External Storage! !
Penyimpan tidak selalu tersedia!
File dapat diakses oleh apps lain!
Ketika aplikasi di uninstall data
anda masih ada.
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
String filename = "myfile";!
String string = "Hello world!";!
FileOutputStream outputStream;! ! try {!
outputStream = openFileOutput(filename, Context.MODE_PRIVATE);!
outputStream.write(string.getBytes());!
outputStream.close();!
} catch (Exception e) {!
e.printStackTrace();!
}
public File getTempFile(Context context, String url) {!
File file;!
try {!
String fileName = Uri.parse(url).getLastPathSegment();!
file = File.createTempFile(fileName, null, context.getCacheDir());!
catch (IOException e) {!
// Error while creating file!
}!
return file;!
}
4. Praktikum ANDROID
Code berikut digunakan melakukan pengecekan apakah external Storage sudah siap untuk
digunakan atau tidak :
Untuk menyimpan file di external storage, Kita dapat menentukan apakah apakah directory yang
kita buat dapat disimpan untuk public atau untuk private.
public File getAlbumStorageDir(String albumName) {!
Sedangkan untuk menyimpan dengan dengan directory private android berikut codennya :
untuk menghapus file bisa menggunakan code berikut
myContext.deleteFile(fileName);
Page 4" of "15
/* Checks if external storage is available for read and write */!
public boolean isExternalStorageWritable() {!
String state = Environment.getExternalStorageState();!
if (Environment.MEDIA_MOUNTED.equals(state)) {!
return true;!
}!
return false;!
}!! /* Checks if external storage is available to at least read */!
public boolean isExternalStorageReadable() {!
String state = Environment.getExternalStorageState();!
if (Environment.MEDIA_MOUNTED.equals(state) ||!
Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {!
return true;!
}!
return false;!
}
public File getAlbumStorageDir(Context context, String albumName) {!
// Get the directory for the app's private pictures directory. !
File file = new File(context.getExternalFilesDir(!
Environment.DIRECTORY_PICTURES), albumName);!
if (!file.mkdirs()) {!
Log.e(LOG_TAG, "Directory not created");!
}!
return file;!
}
// Get the directory for the user's public pictures directory. !
File file = new File(Environment.getExternalStoragePublicDirectory(!
Environment.DIRECTORY_PICTURES), albumName);!
if (!file.mkdirs()) {!
Log.e(LOG_TAG, "Directory not created");!
}!
return file;!
}
5. Praktikum ANDROID
3. Saving Data in SQL Databases
Untuk menyimpan data dengan lebih terstruktur kita dapat menyimpannya di SQLite. Contoh
penggunaan aplikasi NOTE. Sama seperti database Enterprise SQLite terdiri dari Database, Table,
Column, dan Record.
ORMLite
Ormlite adalah third party library Android yang digunakan untuk SQLite di android, ringan dan
dapat menghindari overhead. ORMLite support untuk perintah SQL. Info lebih lanjut dapat dilihat
di http://ormlite.com/sqlite_java_android_orm.shtml .
Pada praktikum kali ini kita akan membahas tentang ORMLite.
Page 5" of "15
6. Praktikum ANDROID
PRAKTIKUM
! Tujuan : Mengenal SQLite, ORMLite,!
Scope : DBManager, Repo, POJO, ! !
1. Create project baru :!
2. Copy library ormlite-android-4.48-2.jar dan ormlite-core-4.48.jar yang sudah tersedia ke
folder project -> libs di eclipse !
3. Klik kanan pada project -> Properties, kemudian pilih Java Build Path -> Add Jars
Page 6" of "15
7. Praktikum ANDROID
4. Pilih project - > libs , Kemudian pilih library yang kita sudah tambahkan !
5. Klik button OK dan OK!
6. Buat file java dengan nama Notes, !
Page 7" of "15
@DatabaseTable(tableName="notes")
public class Notes {
@DatabaseField(generatedId=true)
public int id;
@DatabaseField
public String judul;
@DatabaseField
public String isi;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getJudul() {
return judul;
}
public void setJudul(String judul) {
this.judul = judul;
}
public String getIsi() {
return isi;
}
public void setIsi(String isi) {
this.isi = isi;
}
}
8. Praktikum ANDROID
7. Buat file Java dengan nama DBHelp!
8. Buat file java DBManager! !!
Page 8" of "15
public class DBHelp extends OrmLiteSqliteOpenHelper{
private static final String DATABASE_NAME = "buku.db";
private static final int DATABASE_VERSION = 1;
private Dao<Notes, Integer> daoNotes = null;
private RuntimeExceptionDao<Notes, Integer> runtimesDaoNotes = null;
public DBHelp(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase arg0, ConnectionSource arg1) {
try {
TableUtils.createTable(connectionSource, Notes.class);
} catch (SQLException e) {
Log.e(DBHelp.class.getName(), "Gagal Membuat Table", e);
}
}
@Override
public void onUpgrade(SQLiteDatabase arg0, ConnectionSource arg1, int
arg2,
int arg3) {
try {
TableUtils.dropTable(connectionSource, Notes.class, true);
} catch (SQLException e) {
Log.e(DBHelp.class.getName(), "Gagal Menghapus Table", e);
throw new RuntimeException(e);
}
}
@Override
public void close() {
daoNotes = null;
super.close();
}
public Dao<Notes, Integer> getDaoNotes() throws SQLException{
if (daoNotes==null) {
daoNotes = getDao(Notes.class);
}
return daoNotes;
}
public RuntimeExceptionDao<Notes, Integer> getRuntimesDaoNotes() {
if (runtimesDaoNotes==null) {
runtimesDaoNotes = getRuntimeExceptionDao(Notes.class);
}
return runtimesDaoNotes;
}
}
9. Praktikum ANDROID
9. Buat file java NotesRepo!
10. Edit activity_main.xml layout dengan code berikut :
Page 9" of "15
public class DBManager {
private DBHelp dbHelp = null;
public DBHelp getDbHelp(Context context) {
if (dbHelp==null){
dbHelp = OpenHelperManager.getHelper(context,
DBHelp.class);
}
return dbHelp;
}
public void releaseHelper(DBHelp helper)
{
if (helper != null) {
OpenHelperManager.releaseHelper();
dbHelp = null;
}
}
}
public class NotesRepo {
public DBHelp db;
Dao<Notes,Integer> notesDao;
public NotesRepo(Context context) {
try {
DBManager dbManager = new DBManager();
db = dbManager.getDbHelp(context);
notesDao = db.getDaoNotes();
} catch (SQLException e) {
e.printStackTrace();
}
}public int create(Notes mediaModel) throws SQLException{
return notesDao.create(mediaModel);
}public List<Notes> listall(){
try {
return notesDao.queryForAll();
} catch (SQLException e) {
Log.e("error","query gagal");
e.printStackTrace();
}
return null;
}
}
12. Praktikum ANDROID
Page "12 of "15
public class MainActivity extends Activity {
private ListView list;
private TextView txt;
private List<Notes> notes;
private ArrayAdapter<String> adapter;
private ArrayList<String> arrlist;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
notes = data();
arrlist = data_Notes();
setContentView(R.layout.activity_main);
list = (ListView) findViewById(R.id.note_data);
txt = (TextView) findViewById(R.id.total_data);
!
adapter = new ArrayAdapter<String>(MainActivity.this,
android.R.layout.simple_list_item_1, arrlist);
list.setAdapter(adapter);
!
if (notes.size() > 0) {
txt.setText(notes.size() + " note tersimpan");
} else {
txt.setText("Belum ada note");
}
}
public List<Notes> data(){
return new NotesRepo(MainActivity.this).listall();
}
public ArrayList<String> data_Notes(){
ArrayList<String> dt = new ArrayList<String>();
for (int i = 0; i < data().size(); i++) {
dt.add(data().get(i).getJudul());
}
return dt;
}
public void tambah_data(View view){
startActivity(new Intent(MainActivity.this,
AddActivity.class));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
13. Praktikum ANDROID
!
13. Buat file baru java AddActivity.java !
14. Notes adalah class object dari database dan bisa di sebut sebagai table Notes dengan isi judul
dan body!
15. DBHelp adalah class database help digunakan untuk membuat database dan menghapus
database dalam kondisi tertentu!
16. DBManager adalah database manager digunakan untuk mengontrol database yang akan
digunakan oleh masing-masing table!
17. NotesRepo adalah aktifitas database dari table Notes sebagai contoh create, update, delete,
dan read.!
18. Jalankan aplikasi
Page "13 of "15
public class AddActivity extends Activity {
private EditText title;
private EditText body;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.add_data);
title = (EditText) findViewById(R.id.title_data);
body = (EditText) findViewById(R.id.body_data);
}
public void save_data(View view) {
Notes notes = new Notes();
notes.setJudul(title.getText().toString());
notes.setIsi(body.getText().toString());
try {
new NotesRepo(AddActivity.this).create(notes);
Toast.makeText(AddActivity.this, "Data Sukses
Tersimpan",
Toast.LENGTH_LONG).show();
} catch (SQLException e) {
Toast.makeText(AddActivity.this, "Data Gagal
Tersimpan",
Toast.LENGTH_LONG).show();
e.printStackTrace();
}
startActivity(new Intent(AddActivity.this,
MainActivity.class)
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
finish();
}
}
15. Praktikum ANDROID
Tugas :! !
1. Dari project yang sudah di buat !
1. Tampilkan detail data dengan menggunakan query di NotesRepo!
2. Detail data terdiri dari!
1. Title / Judul!
2. Body / isi!
3. !
2. Tambahkan action delete menggunakan action setOnItemLongClickListener. Jika ditekan
lama maka data akan memunculkan dialog “Hapus Data ” YA untuk menghapus TIDAK untuk
kembali.!
3. Method !
1. Delete :!
public int delete(int id) throws SQLException{!
! return notesDao.deleteById(id);!
}!
2. Detail :!
public Notes detail(int id) throws SQLException{!
! return notesDao.queryForId(id);!
}!
4. Untuk delete di ArrayAdapter anda perlu menambahkan setelah proses delete!
arrlist.remove(arg2);
adapter.notifyDataSetChanged();
Page "15 of "15