Android: Complete Database Tutorial
Tulisan kali ini akan mengupas tentang cara membuat aplikasi database di android. Pada tutorial kali ada, ada banyak sekali trik-trik development android yang saya berikan, diantaranya:
- Penggunaan SQLite untuk INSERT, UPDATE, DELETE data. Berikut dengan proses CREATE TABLE.
- Penggunaan custom ListView dan adapter untuk membaca database.
- Cara membuat Context Menu
- Cara membuat custom Dialog untuk proses input data
Catatan: Kode yang saya tampilkan hanya berupa potongan-potongan yang sekiranya relevan dengan topik yang sedang dibahas. Untuk kode lengkapnya, bisa didownload di akhir tutorial.
Penggunaan SQLite
Sebelum menggunakan database, kita perlu menciptakan terlebih dahulu menggunakan openOrCreateDatabase().
private SQLiteDatabase database = null;
database = this.context.openOrCreateDatabase("book.db",
SQLiteDatabase.CREATE_IF_NECESSARY, null);
String sqlCreate = "CREATE TABLE IF NOT EXISTS " + BOOK_NAME + " ("
+ "isbn TEXT PRIMARY KEY," + "judul TEXT,"
+ "nama_penulis TEXT" + ");";
database.beginTransaction();
database.execSQL(sqlCreate);
database.setTransactionSuccessful();
Untuk melakukan proses query, kita akan membutuhkan object Cursor.
ArrayList<Book> allBook = null;
allBook = new ArrayList<Book>();
cursor = database.rawQuery("SELECT * FROM " + BOOK_NAME, null);
if (cursor.getCount() > 0) {
int indexISBN = cursor.getColumnIndex("isbn");
int indexJudul = cursor.getColumnIndex("judul");
int indexNama = cursor.getColumnIndex("nama_penulis");
cursor.moveToFirst();
do {
String judul = cursor.getString(indexJudul);
String namaPenulis = cursor.getString(indexNama);
String ISBN = cursor.getString(indexISBN);
Book book = new Book();
book.setJudul(judul);
book.setNamaPenulis(namaPenulis);
book.setISBN(ISBN);
allBook.add(book);
cursor.moveToNext();
} while (!cursor.isAfterLast());
}
Proses berikutnya, yang berhubungan dengan INSERT, UPDATE, dan DELETE data. Alurnya tidak begitu berbeda dengan proses membuat table. Yang membedakan hanya pada penambahan parameter.
database.beginTransaction();
String insertSQL = "INSERT INTO " + BOOK_NAME
+ " (isbn, judul, nama_penulis) VALUES(?,?,?)";
database.execSQL( insertSQL,
new Object[] { book.getISBN(), book.getJudul(),
book.getNamaPenulis() });
database.setTransactionSuccessful();
Custom ListView dan ListAdapter
ListView di android, paling sederhana akan melibatkan 2 file layout XML. XML pertama, untuk menampung ListView itu sendiri. Sedangkan XML satunya untuk mendefinisikan bagaimana android akan menampilkan element dari masing-masing list.
main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ListView
android:id="@+id/lsvListBook"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentTop="true"
/>
</RelativeLayout >
list.xml
<?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" >
<TextView
android:id="@+id/txtListJudulBuku"
android:layout_width="wrap_content"
android:layout_marginTop="5px"
android:layout_marginBottom="10px"
android:layout_height="wrap_content"
android:text="TextView" />
</LinearLayout>
Lalu, bagaimana kita menyambungkan antara view dari ListView dan detail-nya? Itu adalah tugas dari adapter. Pada android, kalau kita ingin membuat custom adapter, bisa dengan meng-extends BaseAdapter.
lsvBookView = (ListView) findViewById(R.id.lsvListBook); bookDB = new BookDB(getApplicationContext()); adapter = new BookAdapter(this); listBook = bookDB.toArray(); adapter.updateListBook(listBook); lsvBookView.setAdapter(adapter);
Berikut kode untuk BaseAdapter:
public class BookAdapter extends BaseAdapter {
private ArrayList<Book> listBook = null;
private static LayoutInflater inflater = null;
public BookAdapter(Activity activity) {
inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public void updateListBook(ArrayList<Book> newListBook) {
this.listBook = newListBook;
}
@Override
public int getCount() {
return this.listBook.size();
}
@Override
public Book getItem(int position) {
return this.listBook.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View view, ViewGroup viewGroup) {
}
}
Secara umum, yang kita wajib kita override dari BaseAdapter adalah getCount(), getItem(), getItemId(), dan getView(). Nah, getView() ini yang pada akhirnya akan memproses file detail (dalam kasus ini, list.xml) untuk menghasilkan view detail.
@Override
public View getView(int position, View view, ViewGroup viewGroup) {
View vi = view;
if (vi == null) {
vi = inflater.inflate(R.layout.list, null);
}
Book book = this.listBook.get(position);
TextView txtListJudul = (TextView) vi
.findViewById(R.id.txtListJudulBuku);
txtListJudul.setText(book.getJudul());
return vi;
}
Bisa dilihat bagaimana getView() memproses informasi posisi dan view pada posisi tersebut. Dengan cara ini, kita bisa bermain-main dengan tampilan isi ListView. Misal, suatu saat, anda ingin membuat ListView yang bila posisi ke-10 berisi data foto, maka akan menampilkan foto tersebut. Tapi, bila berisi data lagu, akan menampilkan view berupa control music (play, pause, stop, dll).
Ada satu lagi trik yang berguna, bila berhubungan dengan ListView. Seperti yang sudah disebutkan di atas, untuk menghubungkan ListView dengan data, kita menggunakan Adapter. Lalu, bagaimana caranya bila suatu ketika data yang ada berubah? Sederhana, cukup dengan menyetting ulang ListView.setAdapter():
/**
* We need to refresh adapter for every data update. Without it, ListView will never be refreshed.
*/
protected void refreshListAdapter() {
listBook = bookDB.toArray();
adapter.updateListBook(listBook);
lsvBookView.setAdapter(adapter);
}
Membuat ContextMenu
Pada umumnya, context menu adalah menu yang muncul saat melakukan long-press pada suatu element view. Pada tutorial ini, ContextMenu akan diimplementasikan pada long-press di ListView. Tujuannya untuk menampilkan menu Edit dan Delete. Flownya secara singkat adalah sebagai berikut:
- menambahkan registerForContextMenu() pada onCreate()
- Override onCreateContextMenu() untuk menambahkan menu item pada context menu
@Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo cmInfo) { if (v.getId() == R.id.lsvListBook) { AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) cmInfo; menu.setHeaderTitle(listBook.get(info.position).getJudul()); String[] menuItems = { "Update", "Delete" }; for (int menuIndex = 0; menuIndex < menuItems.length; menuIndex++) { menu.add(Menu.NONE, menuIndex, menuIndex, menuItems[menuIndex]); } } } - Override onContextItemSelected() untuk menghandle saat context menu item terpilih
@Override public boolean onContextItemSelected(MenuItem item) { AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); int menuItemIndex = item.getItemId(); Book book = listBook.get(info.position); switch (menuItemIndex) {// taken from menuItems in onCreateContextMenu() case 0: showFormDialog(book); break; case 1: Log.i("Log", "item " + book.getJudul() + " deleted!"); bookDB.delete(book); refreshListAdapter(); break; } return true; }
Membuat custom Dialog
Membuat custom dialog di android cukup mudah. Pertama, seperti biasa, inisialisasi object:
formDialog = new Dialog(ListDataActivity.this);
formDialog.setContentView(R.layout.form);
formDialog.setTitle("Form Buku");
Lalu (opsional) buat supaya dialog ini nantinya selebar layar. Sebab, bila tidak diset secara manual, akan terlalu sempit hasilnya:
// set dialog width to fill_parent LayoutParams formDialogParams = formDialog.getWindow().getAttributes(); formDialogParams.width = LayoutParams.FILL_PARENT; formDialog.getWindow().setAttributes( (android.view.WindowManager.LayoutParams) formDialogParams);
Yang terakhir tinggal memanggil show() untuk menampilkan dialog tersebut:
formDialog.show();
Sekian dulu tutorial kali ini. Stay tune di twitter saya @ariefbayu atau facebook page Freelancer.Web.Id untuk update-update tutorial berikutnya.
-
http://rainbowharmony.wordpress.com/ dhidhut19
-
http://bayu.freelancer.web.id/ ariefbayu
-
hezbyislami
-
http://bayu.freelancer.web.id/ ariefbayu
-
hezbyislami
-
Septiyan Andika
Popular Search Terms
php get current directory, phpexcel tutorial, php current directory, phpexcel examples, php current dir, php get current path, permainan tebakan, cara mengetahui IP website, php get current dir, phpexcel example
Me on posterous
About Me
Hi, I'm Arief. A mobile technology enthusiast. I also did some freelance job. You got something for me? Let's get in touch here. For a complete info, head over here and here.
All resources written in here is copyrighted their rightful owner. If it's mine and no other copyright information on that particular page / post. Then, it's licensed in WTFPL









