Tutorial Belajar Database SQLite di Android (VI) : Membuat Fungsi Get Detail Data

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.

View Data Detail SQLite Android

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. 🙂



Download aplikasi kami di Google Play Store


4 Comments

  1. dian February 2, 2017
    • Hafizh Herdi February 2, 2017
  2. Esa Prasetio April 18, 2017

Leave a Reply