Top Banner
Praktikum ANDROID ANDROID FOR BEGINNER MODUL 8 [ANDROID SAVING DATA] SUDARYATNO [email protected] | @dodulz | facebook : yatno.sudar Page of 1 15
15

Modul praktikum 8 - Android Sudaryatno

May 26, 2015

Download

Software

Yatno Sudar

Modul,Android,Tutorial
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Modul praktikum 8 - Android Sudaryatno

Praktikum ANDROID

ANDROID

FOR

BEGINNER MODUL 8 ![ANDROID SAVING DATA]

!!!!!SUDARYATNO [email protected] | @dodulz | facebook : yatno.sudar

Page � of �1 15

Page 2: Modul praktikum 8 - Android Sudaryatno

Praktikum ANDROIDANDROID 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 � of �2 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);

Page 3: Modul praktikum 8 - Android Sudaryatno

Praktikum ANDROID2. 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 � of �3 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;!}

Page 4: Modul praktikum 8 - Android Sudaryatno

Praktikum ANDROIDCode 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.

Sedangkan untuk menyimpan dengan dengan directory private android berikut codennya :

untuk menghapus file bisa menggunakan code berikut

myContext.deleteFile(fileName);

Page � of �4 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;!}

public File getAlbumStorageDir(String albumName) {! // 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;!}

Page 5: Modul praktikum 8 - Android Sudaryatno

Praktikum ANDROID3. 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 � of �5 15

Page 6: Modul praktikum 8 - Android Sudaryatno

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 � of �6 15

Page 7: Modul praktikum 8 - Android Sudaryatno

Praktikum ANDROID4. Pilih project - > libs , Kemudian pilih library yang kita sudah tambahkan !

5. Klik button OK dan OK!6. Buat file java dengan nama Notes, !

Page � of �7 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; }}

Page 8: Modul praktikum 8 - Android Sudaryatno

Praktikum ANDROID7. Buat file Java dengan nama DBHelp!

8. Buat file java DBManager!!!Page � of �8 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; }}

Page 9: Modul praktikum 8 - Android Sudaryatno

Praktikum ANDROID

9. Buat file java NotesRepo!

10. Edit activity_main.xml layout dengan code berikut :

Page � of �9 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; }}

Page 10: Modul praktikum 8 - Android Sudaryatno

Praktikum ANDROID

!11. Buat file layout dengan nama add_data.xml dengan code berikut :

Page � of �10 15

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/total_data" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:layout_weight="0.3" android:text="Data Tersimpan" android:textAppearance="?android:attr/textAppearanceMedium" />! <Button android:id="@+id/button1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="tambah_data" android:text="+" /> </LinearLayout> <ListView android:id="@+id/note_data" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" > </ListView></LinearLayout>

Page 11: Modul praktikum 8 - Android Sudaryatno

Praktikum ANDROID

!12. Edit file MainActivity.java dengan code berikut : !!!

Page � of �11 15

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" > <TextView android:id="@+id/textView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Title" android:textAppearance="?android:attr/textAppearanceMedium" /> <EditText android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:ems="10" > <requestFocus /> </EditText> <TextView android:id="@+id/textView2" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:text="Body" android:textAppearance="?android:attr/textAppearanceMedium" /> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="0.2" android:orientation="vertical" > <EditText android:id="@+id/editText2" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:background="#fff" android:ems="10" android:hint="isi notes" android:inputType="textMultiLine" /> </LinearLayout> <Button android:id="@+id/button1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Button" />!</LinearLayout>

Page 12: Modul praktikum 8 - Android Sudaryatno

Praktikum ANDROID

Page � of �12 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; }}

Page 13: Modul praktikum 8 - Android Sudaryatno

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 � of �13 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(); }}

Page 14: Modul praktikum 8 - Android Sudaryatno

Praktikum ANDROID

!

Page � of �14 15

Page 15: Modul praktikum 8 - Android Sudaryatno

Praktikum ANDROIDTugas :!!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 � of �15 15