Last Updated on 7 years by Mas Herdi
Pada bagian ketiga tentang tutorial membuat aplikasi inventaris barang pada Android menggunakan database SQLite ini, kita akan belajar tentang bagaimana membuat fungsi read/view data, untuk melihat data yang sudah dimasukkan ke database SQLite.
Tutorial ini berhubungan dengan tutorial-tutorial tentang database SQLite sebelumnya, karena itu saya sarankan untuk membaca tutorial-tutorial sebelumnya di sini.
Pre-Requisites
Membuat fitur Lihat Data
Oke, langsung saja, pada tutorial kali ini kita akan menambahkan fitur lihat data barang pada aplikasi inventaris yang akan kita buat. Pertama-tama kita akan memperbarui file layout menu.xml dengan menambahkan satu buah tombol Lihat Data.
Oh iya, sebelumnya buka dulu file values/strings.xml untuk memasukkan konstanta-konstanta String yang digunakan pada aplikasi, hal ini dilakukan supaya aplikasi ini memenuhi standar aplikasi Android yang baik. 🙂
File values/strings.xml
<resources> <string name="app_name">AppInventory</string> <string name="nama_app">twoh.co</string> <string name="hello_world">Hello world!</string> <string name="menu_settings">Settings</string> <string name="title_activity_main">AppInventory</string> <string name="barang_hint">Nama Barang</string> <string name="harga_hint">Harga Barang</string> <string name="merk_hint">Merk Barang</string> <string name="tombol_submit">Submit</string> <string name="tombol_tambah">Tambah Data</string> <string name="tombol_lihat">Lihat Data</string> <string name="title_view">Data Barang</string> </resources>
Kemudian, inilah file menu.xml yang baru :
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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/nama_app" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:textSize="20sp" android:text="@string/nama_app" /> <Button android:id="@+id/button_tambah" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/nama_app" android:layout_centerHorizontal="true" android:text="@string/tombol_tambah" /> <Button android:id="@+id/button_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/button_tambah" android:layout_centerHorizontal="true" android:text="@string/tombol_lihat" /> </RelativeLayout>
Setelah itu, kita update juga file activity Menu.java-nya. Copy pastekan kode di bawah ini
package id.twooh.appinventory; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class Menu extends Activity implements OnClickListener{ private Button bTambah; private Button bLihat; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.menu); bTambah = (Button) findViewById(R.id.button_tambah); bTambah.setOnClickListener(this); bLihat = (Button) findViewById(R.id.button_view); bLihat.setOnClickListener(this); } @Override public void onClick(View v) { // TODO Auto-generated method stub switch(v.getId()) { case R.id.button_tambah : Intent i = new Intent(this, CreateData.class); startActivity(i); break; case R.id.button_view : Intent i2 = new Intent(this, ViewData.class); startActivity(i2); break; } } }
Kita menambahkan button kedua, yaitu button_view, yang apabila di-klik akan membawa kita ke aktivitas ViewData yang akan kita buat. Apabila ada error, biarkan saja untuk sementara.
Oke, sekarang kita akan meng-update kontroller aplikasi, yaitu file DataSource.java untuk menambahkan fungsi getAllBarang() yang berfungsi untuk mengambil semua data barang dari database. Seperti inilah fungsinya. Tambahkan pada bagian sebelum kurung tutup terakhir :
//mengambil semua data barang public ArrayList<Barang> getAllBarang() { ArrayList<Barang> daftarBarang = new ArrayList<Barang>(); // select all SQL query Cursor cursor = database.query(DBHelper.TABLE_NAME, allColumns, null, null, null, null, null); // pindah ke data paling pertama cursor.moveToFirst(); // jika masih ada data, masukkan data barang ke // daftar barang while (!cursor.isAfterLast()) { Barang barang = cursorToBarang(cursor); daftarBarang.add(barang); cursor.moveToNext(); } // Make sure to close the cursor cursor.close(); return daftarBarang; }
Dan ini adalah kode lengkap untuk DBDataSource.java :
package id.twooh.appinventory; import java.util.ArrayList; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.util.Log; public class DBDataSource { //inisialiasi SQLite Database private SQLiteDatabase database; //inisialisasi kelas DBHelper private DBHelper dbHelper; //ambil semua nama kolom private String[] allColumns = { DBHelper.COLUMN_ID, DBHelper.COLUMN_NAME, DBHelper.COLUMN_MERK,DBHelper.COLUMN_HARGA}; //DBHelper diinstantiasi pada constructor public DBDataSource(Context context) { dbHelper = new DBHelper(context); } //membuka/membuat sambungan baru ke database public void open() throws SQLException { database = dbHelper.getWritableDatabase(); } //menutup sambungan ke database public void close() { dbHelper.close(); } //method untuk create/insert barang ke database public Barang createBarang(String nama, String merk, String harga) { // membuat sebuah ContentValues, yang berfungsi // untuk memasangkan data dengan nama-nama // kolom pada database ContentValues values = new ContentValues(); values.put(DBHelper.COLUMN_NAME, nama); values.put(DBHelper.COLUMN_MERK, merk); values.put(DBHelper.COLUMN_HARGA, harga); // mengeksekusi perintah SQL insert data // yang akan mengembalikan sebuah insert ID long insertId = database.insert(DBHelper.TABLE_NAME, null, values); // setelah data dimasukkan, memanggil // perintah SQL Select menggunakan Cursor untuk // melihat apakah data tadi benar2 sudah masuk // dengan menyesuaikan ID = insertID Cursor cursor = database.query(DBHelper.TABLE_NAME, allColumns, DBHelper.COLUMN_ID + " = " + insertId, null, null, null, null); // pindah ke data paling pertama cursor.moveToFirst(); // mengubah objek pada kursor pertama tadi // ke dalam objek barang Barang newBarang = cursorToBarang(cursor); // close cursor cursor.close(); // mengembalikan barang baru return newBarang; } private Barang cursorToBarang(Cursor cursor) { // buat objek barang baru Barang barang = new Barang(); // debug LOGCAT Log.v("info", "The getLONG "+cursor.getLong(0)); Log.v("info", "The setLatLng "+cursor.getString(1)+","+cursor.getString(2)); /* Set atribut pada objek barang dengan * data kursor yang diambil dari database*/ barang.setId(cursor.getLong(0)); barang.setNama_barang(cursor.getString(1)); barang.setMerk_barang(cursor.getString(2)); barang.setHarga_barang(cursor.getString(3)); //kembalikan sebagai objek barang return barang; } //mengambil semua data barang public ArrayList<Barang> getAllBarang() { ArrayList<Barang> daftarBarang = new ArrayList<Barang>(); // select all SQL query Cursor cursor = database.query(DBHelper.TABLE_NAME, allColumns, null, null, null, null, null); // pindah ke data paling pertama cursor.moveToFirst(); // jika masih ada data, masukkan data barang ke // daftar barang while (!cursor.isAfterLast()) { Barang barang = cursorToBarang(cursor); daftarBarang.add(barang); cursor.moveToNext(); } // Make sure to close the cursor cursor.close(); return daftarBarang; } }
Kontroller sudah diperbarui, sekarang tinggal membuat view baru untuk menampilkan data barang yang ada pada database. Kita akan membuat layoutnya dulu, buat file xml layout baru dengan nama viewdata.xml. Dan isikan kode berikut :
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/data_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/title_view" android:layout_gravity="center_horizontal" android:background="#0000ff" /> <ListView android:id="@android:id/list" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>
Kita menggunakan ListView layout untuk menampilkan data barang pada aplikasi. Setelah itu, kita akan membuat file activity-nya bernama ViewData.java. Pada kelas tersebut, data barang yang diambil akan dimasukkan ke dalam ArrayList yang nantinya akan diset menggunakan ArrayAdapter. Ini adalah kode untuk kelas ViewData.java :
package id.twooh.appinventory; import java.util.ArrayList; import android.app.ListActivity; import android.os.Bundle; import android.widget.ArrayAdapter; public class ViewData extends ListActivity { //inisialisasi kontroller private DBDataSource dataSource; //inisialisasi arraylist private ArrayList<Barang> values; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.viewdata); dataSource = new DBDataSource(this); // buka kontroller dataSource.open(); // ambil semua data barang values = dataSource.getAllBarang(); // masukkan data barang ke array adapter ArrayAdapter<Barang> adapter = new ArrayAdapter<Barang>(this, android.R.layout.simple_list_item_1, values); // set adapter pada list setListAdapter(adapter); } }
Yang terakhir adalah memodifikasi Android Manifest dengan menambahkan View Data ke dalam daftar aktivitas. Buka file AndroidManifest dan masukkan kode berikut :
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="id.twooh.appinventory" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="id.twooh.appinventory.CreateData" android:label="@string/title_activity_main" > </activity> <activity android:name=".Menu" android:label="@string/title_activity_main" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".ViewData" android:label="@string/title_activity_main" > </activity> </application> </manifest>
That’s all, kira kira begini tampilan aplikasi ketika dijalankan.
Demo
Kita sudah memasukkan satu barang.
Kemudian, kembali ke main menu.
Kita coba klik Lihat Data, hehe
Dan kita bisa lihat ada data barang di sana. Coba tambahkan beberapa barang lagi.
Kira-kira seperti itu. 🙂 Silahkan bertanya apabila ada yang kurang jelas 😉
Untuk demo-nya, kalian bisa cek dan download AppInventory di Google Play Store.
Kalian juga bisa download/forking kode aplikasi ini di GitHub saya.
teruus posting yg bermanfaat gan, makasih…
lagi belajar android programming nih pake eclipse tapi error mulu.ink
posting yg bermanfaat gan,..
gan klo barangnya di klik lalu masuk ke layout lain gmn cara nya gan?
Bisa aja bro, konsepnya sama kayak lihat semua barang 🙂 Cuma kalo ini kita lihat satu barang aja/individual
Saya coba unduh dari GitHub lalu saya impor dari ADT saya.
Mengapa di ViewData.java muncul banyak error, mis:
-java.lang.Object can not be resolved.
-ListActivity can not be resolved to a type.
etc…
Wah kalo java.lang.Object can not be resolved. itu berarti instalasi Java-nya belum bener bro 😀
Terima kasih pak.
Lalu mengapa tiap kali saya pilih menu Lihat Data selalu muncul “unfortunately, appinventory has stopped”.
Cek error-nya di sini 🙂
http://www.twoh.web.id/2013/02/mengatasi-force-close-pada-aplikasi-android-menggunakan-logcat/
gan bisa lebih di jelaskan tentang cara mengkilk barang lalu masuk ke layout lain ?
klo bisa gan di tambahbarang ada radiobutton dan masuk ke data base heheh sekalian
maaf ngerepotin gan 😉
pak Guru Hafidz berapa jumlah record data yang bisa ditampung sqlite? dan apakah sqlite memiliki fasilitas convert ke mysql, maaf newbie mohon pencerahan
Kalo jumlah record bisa sampai tidak terbatas. Tergantung jumlah memory 🙂
Bisa saja, kan sama MySQL
gan Hafizh, berhubungan dengan transfer data SQLite ke MySQL….
punya contohnya gak? multiple row/record di SQLite.
Thanks.
gan, kalo mau bikin ListView yg bisa dimodif per itemnya gimana?
terima kasih 🙂
gan kalo misalnya mau liat databse yang udah di buat di android kalo mau nge check di eclipse caranya gimana ?
salam kenal gan, tutorial yg menarik 🙂 owh ya kalo dpetin datanya dari mysql gmna gan?
gan ane kok langsung force close ketika click button lihat data, kesalahan yang ane baca ada di viewdata.java, mungkin agan bisa kasih tau alasan yang lain, minta bantuannya gan terimakasih
ini pesan error-nya
05-28 06:45:24.025: E/AndroidRuntime(470): FATAL EXCEPTION: main
05-28 06:45:24.025: E/AndroidRuntime(470): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.dbserver/com.dbserver.ViewData}: java.lang.RuntimeException: Your content must have a ListView whose id attribute is ‘android.R.id.list’
05-28 06:45:24.025: E/AndroidRuntime(470): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
05-28 06:45:24.025: E/AndroidRuntime(470): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
05-28 06:45:24.025: E/AndroidRuntime(470): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
05-28 06:45:24.025: E/AndroidRuntime(470): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
05-28 06:45:24.025: E/AndroidRuntime(470): at android.os.Handler.dispatchMessage(Handler.java:99)
05-28 06:45:24.025: E/AndroidRuntime(470): at android.os.Looper.loop(Looper.java:123)
05-28 06:45:24.025: E/AndroidRuntime(470): at android.app.ActivityThread.main(ActivityThread.java:3683)
05-28 06:45:24.025: E/AndroidRuntime(470): at java.lang.reflect.Method.invokeNative(Native Method)
05-28 06:45:24.025: E/AndroidRuntime(470): at java.lang.reflect.Method.invoke(Method.java:507)
05-28 06:45:24.025: E/AndroidRuntime(470): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
05-28 06:45:24.025: E/AndroidRuntime(470): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
05-28 06:45:24.025: E/AndroidRuntime(470): at dalvik.system.NativeStart.main(Native Method)
05-28 06:45:24.025: E/AndroidRuntime(470): Caused by: java.lang.RuntimeException: Your content must have a ListView whose id attribute is ‘android.R.id.list’
05-28 06:45:24.025: E/AndroidRuntime(470): at android.app.ListActivity.onContentChanged(ListActivity.java:243)
05-28 06:45:24.025: E/AndroidRuntime(470): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:210)
05-28 06:45:24.025: E/AndroidRuntime(470): at android.app.Activity.setContentView(Activity.java:1657)
05-28 06:45:24.025: E/AndroidRuntime(470): at com.dbserver.ViewData.onCreate(ViewData.java:19)
05-28 06:45:24.025: E/AndroidRuntime(470): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-28 06:45:24.025: E/AndroidRuntime(470): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
05-28 06:45:24.025: E/AndroidRuntime(470): … 11 more
thanks banget gan,. postingan agan bener bener membantu,
:*,
Makasih banyak ya mas, membantu sekali buat pemula kaya saya heheheh
share lagi yang laen ya mas
saat data ditampilkan :
Barang null null null
Barang null null null
Barang null null null
mohon koreksinya, terimakasih ^_^
Mas, kalo di bagian view data udah diinsert datanya betul, tapi pas di view data dia bukan nampilin data barang dan harganya, malah nampilin nama package com.blablabla. kenapa ya kira-kira? padahal sama codingnya
bang bagaimana cara agar tampilannya dalam bentuk gridView Fragment, mohon pencerahannya terimakasih :))
mas saya kan bikin project yang pake database, pas di export jadi apk dan diinstal di hp ko databasenya ga ada ya, gimana cara nya supaya ngikut..
tks.
Database nya akan otomatis tercreate ketika APK itu udah diinstal dan dijalankan di hp Android ente gan, letaknya di direktori sistem Android sehingga memang nggak bisa diakses dari luar.
kalo pake emulator di android studio ‘listview bisa keliatan, tapi kalo pake genymotion ‘listview ndak keliatan kenapa ya mas?
barangkali beda versi Androidnya bro
Brooo mau nanyak caranya untuk mengirim data yang sudah di inputkan ke sqllite dan di transfer ke MySql gimana ya broo? soalnya kebingungan nih
Posting nya sangat bermanfaat mas, udah ane sedot, hehe 😀
Mas Hafidz gmna cara transfer ke android lain dr listview yg sudah tersimpan 🙂
Mohon info nya 🙂
Maksudnya transfer ke android lain, ke aplikasi ente di hape lain ya gan? Kalo itu ente butuh yang namanya web service 🙂
waktu nambah itu kok otomatis dihapus saat run ?
maksudnya?
Kak mau tanya misal saya membuat aplikasi sistem pakar diagnosa penyakit padi,, misal saya mau membuat menu history,, yang berisi penyakit2 yg sebelumnya telah kita tampilkan caranya gimana ya kak? Mohon bantuanya
pertanyaanmu terlalu luas… cobalah membongkar apa yang ingin kamu capai menjadi bagian yang lebih kecil
mas, saya mau import database sqlite nya ke android studio untuk membuat applikasi semacam ini, dimanakah kira-kira database sqlite harus saya import? dan bagaimana caranya. terus saya membuat semua java class dalam tutorial ini ke dalam main activity, benarkan? mohon advicenya
Kalau aplikasi read db aja ada kagak brow?…
Jadi isi db dah tertanam dan user tinggal masukin id atau nama aja untuk memanggil isi dari db yg ada?….