Last Updated on 7 years by Mas Herdi
Kali ini saya akan coba melanjutkan tutorial series soal database SQLite Android yang ditulis 4 tahun ya lalu, ya benar 4 tahun yang lalu, yaitu pada tahun 2013 :D. Ada satu fungsi yang kurang, yaitu fungsi untuk read/get details data dan menampilkannya pada View. Karena tutorial-tutorial sebelumnya dibuat 4 tahun yang lalu dimana Android masih belum secanggih saat ini dan codingan saya juga masih berantakan :), maka ada beberapa perubahan yang saya lakukan di sana sini.
Tutorial ini berhubungan dengan tutorial-tutorial tentang database SQLite sebelumnya (tutorial I – V), karena itu saya sarankan untuk membaca tutorial-tutorial sebelumnya di sini. Atau kalian bisa melihat list lengkapnya pada pre-requisites di bawah.
Pre Requisites
- Tutorial membuat database SQLite Android (link)
- Implementasi fitur Create Data (link)
- Implementasi fitur Read Data (link)
- Implementasi fitur Update Data (link)
- Implementasi fitur Delete Data (link)
Membuat Fitur Get Single Data pada SQLite Android
Berbeda dengan fitur read data pada tutorial sebelumnya yang menampilkan data di SQLite sebagai list, pada tutorial ini kita akan menampilkan single item dari data di list tersebut. Jadi apabila kita klik salah satu data, akan tampil satu halaman activity baru yang menampilkan detail dari data yang tadi dipilih.
Langsung saja, kita buat sebuah layout baru bernama view_single_data.xml, dan isinya seperti berikut :
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="10dp" android:orientation="vertical" android:padding="10dp"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="View Data : " android:textAppearance="@style/TextAppearance.AppCompat.Title" /> <TextView android:id="@+id/tv_nama_barang" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="15dp" android:ems="10" android:hint="@string/barang_hint" android:inputType="text" /> <TextView android:id="@+id/tv_merk_barang" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="15dp" android:ems="10" android:hint="@string/merk_hint" android:inputType="text" /> <TextView android:id="@+id/tv_harga_barang" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="15dp" android:ems="10" android:hint="@string/harga_hint" android:inputType="number" /> <Button android:layout_marginTop="15dp" android:id="@+id/bt_ok" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="OK" /> </LinearLayout>
Setelah kita buat layoutnya, sekarang kita buat activity-nya bernama ViewSingleData.java, copy pastekan kode di bawah ini ke dalam activity tersebut :
package id.twooh.appinventory.activity; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.TextView; import id.twooh.appinventory.R; /** * Created by Hafizh Herdi on 1/29/2017. */ public class ViewSingleData extends AppCompatActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.view_single_data); TextView tvNama = (TextView) findViewById(R.id.tv_nama_barang); TextView tvMerk = (TextView) findViewById(R.id.tv_merk_barang); TextView tvHarga = (TextView) findViewById(R.id.tv_harga_barang); System.out.println("APPINVENT "+getIntent().getExtras().getString("nama")); tvNama.setText("Barang "+getIntent().getExtras().getString("nama")); tvMerk.setText("Merk "+getIntent().getExtras().getString("merk")); tvHarga.setText("Harga "+getIntent().getExtras().getString("harga")); Button buttonOK = (Button) findViewById(R.id.bt_ok); buttonOK.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); } }
Kemudian, kalian bisa mmebuka kelas ViewData.java, di kelas itu kita akan menambahkan OnClickListener pada listView, dan juga sebuah method untuk pindah ke activity ViewSingleData.java. Sehingga apabila listView diklik, method tersebut akan dipanggil dan aplikasi akan pindah halaman ke ViewSingleData activity. Ganti kode pada kelas ViewData.java dengan kode di bawah ini :
package id.twooh.appinventory.activity; import java.util.ArrayList; import android.app.Dialog; import android.app.ListActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ListView; import id.twooh.appinventory.Barang; import id.twooh.appinventory.DBDataSource; import id.twooh.appinventory.R; public class ViewData extends ListActivity implements AdapterView.OnItemLongClickListener { //inisialisasi kontroller private DBDataSource dataSource; //inisialisasi arraylist private ArrayList<Barang>; values; private Button editButton; private Button delButton; @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); // mengambil listview untuk diset onItemLongClickListener ListView lv = (ListView) findViewById(android.R.id.list); lv.setOnItemLongClickListener(this); lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Barang barang = (Barang) getListAdapter().getItem(position); switchToGetData(barang.getId()); } }); } //apabila ada long click @Override public boolean onItemLongClick(final AdapterView<?> adapter, View v, int pos, final long id) { //tampilkan alert dialog final Dialog dialog = new Dialog(this); dialog.setContentView(R.layout.dialog_view); dialog.setTitle("Pilih Aksi"); dialog.show(); final Barang b = (Barang) getListAdapter().getItem(pos); editButton = (Button) dialog.findViewById(R.id.button_edit_data); delButton = (Button) dialog.findViewById(R.id.button_delete_data); //apabila tombol edit diklik editButton.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub switchToEdit(b.getId()); dialog.dismiss(); } } ); //apabila tombol delete di klik delButton.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { // Delete barang dataSource.deleteBarang(b.getId()); dialog.dismiss(); finish(); startActivity(getIntent()); } } ); return true; } //method untuk edit data public void switchToEdit(long id) { Barang b = dataSource.getBarang(id); Intent i = new Intent(this, EditData.class); Bundle bun = new Bundle(); bun.putLong("id", b.getId()); bun.putString("nama", b.getNama_barang()); bun.putString("merk", b.getMerk_barang()); bun.putString("harga", b.getHarga_barang()); i.putExtras(bun); finale(); startActivity(i); } //method untuk get single data public void switchToGetData(long id) { Barang b = dataSource.getBarang(id); Intent i = new Intent(this, ViewSingleData.class); Bundle bun = new Bundle(); bun.putLong("id", b.getId()); bun.putString("nama", b.getNama_barang()); bun.putString("merk", b.getMerk_barang()); bun.putString("harga", b.getHarga_barang()); i.putExtras(bun); dataSource.close(); startActivity(i); } //method yang dipanggil ketika edit data selesai public void finale() { ViewData.this.finish(); dataSource.close(); } @Override protected void onResume() { dataSource.open(); super.onResume(); } @Override protected void onPause() { dataSource.close(); super.onPause(); } }
Method yang digunakan untuk mengambil single data dan menampilkannya pada satu activity terpisah adalah switchToGetData();
Bagaimana cara mengambil/meng-query single data dari database SQLite? Kita menggunakan id barang untuk men-select barang yang sesuai dengan id tersebut. Method nya sudah ada di DBDataSource.java, dan kita gunakan juga pada tutorial edit data di database SQLite Android. Isi method nya seperti di berikut:
public Barang getBarang(long id) { Barang barang = new Barang(); //inisialisasi barang //select query Cursor cursor = database.query(DBHelper.TABLE_NAME, allColumns, "_id =" + id, null, null, null, null); //ambil data yang pertama cursor.moveToFirst(); //masukkan data cursor ke objek barang barang = cursorToBarang(cursor); //tutup sambungan cursor.close(); //return barang return barang; }
Terakhir, kita tambahkan activity baru tersebut ke dalam AndroidManifest.xml.
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="id.twooh.appinventory" android:versionCode="1" android:versionName="1.0" > <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="id.twooh.appinventory.activity.CreateData" android:label="@string/title_activity_main" > </activity> <activity android:name=".activity.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=".activity.ViewData" android:label="@string/title_activity_main" > </activity> <activity android:name=".activity.EditData" android:label="@string/title_activity_main" > </activity> <activity android:name=".activity.ViewSingleData" android:label="@string/title_activity_main" > </activity> </application> </manifest>
Demo
Untuk demonya tinggal jalankan aplikasi, pilih menu Lihat Data dan pilih data mana yang ingin dilihat detailnya di ListView.
That’s all. 🙂 Hanya itu yang perlu ditambahkan, maka dengan ini saya nyatakan Tutorial SQLite di Android selesai untuk kedua kalinya :D. Untuk demo-nya, kalian bisa cek dan download (tentu saja) AppInventory di Google Play Store. Dan source code nya bisa dicek di GitHub saya, dengan terlebih dahulu follow dan star repo-nya. 😀
Silahkan bertanya di bagian komentar apabila ada yang belum dimengerti. 🙂
salam mas, mohon penjelasannya untuk error di bawah ini
Error:(37, 22) error: expected
pada baris perintah di bawah ini
private ArrayList< User> values;
dan solusinya mas, terima kasih sebelumnya
User? Maaf itu dari codingan tutorial yang mana ya?
bang hafizh, kalo misal mau bikin tabel lebih dari satu gimana?
Sama saja, pada postingan ini https://www.twoh.co/2013/01/16/android-database-sqlite-tutorial-i-membuat-database-sqlite/
buat table name nya jadi dua/ sebanyak table yang diinginkan
Mas, kalo 2 tabel (misal: barang, makanan) apa DBDataSource sm DBHelper nya jadi satu?
Iya lebih baik dibedakan, bisa saja dibuat sama. Tapi nanti takutnya jadi berantakan
bang hafizh kalau mau si listview nya di urutkan berdasarkan nama bagaimana ??
Tinggal disorting saja berdasarkan nama, bisa pake “`SORT BY“` di SQL nya
dibagian pemanggilan adapternya ada yang salah gan, itu kenapa ya ? salahnya dibagian ini :
// masukkan data barang ke array adapter
ArrayAdapter; adapter = new ArrayAdapter(this,
android.R.layout.simple_list_item_1, values);
// set adapter pada list
setListAdapter(adapter);