Friday, January 24, 2014

Android Database SQLite Tutorial (IV) : Membuat Fungsi Edit Data (Update Data) dan Hapus Data

Ini merupakan tutorial lanjutan dari seri tutorial android sebelumnya (lihat postingan sebelum ini). Jadi kita akan tetap bekerja pada project yang sudah kita buat sebelumnya. Fitur Edit dan Hapus data ini dijalankan dengan pertama-tama melakukan long click item pada list lihat data. Yang kemudian akan memunculkan dialog dan kita bisa memilih untuk Edit atau Hapus data.
Okeh langsung saja ke step-stepnya:
1. Buat Activity baru dengan nama “EditData” (tanpa tanda petik) dan layout “editdata”. *Silahkan sesuaikan sendiri jika ingin memberi nama sendiri.
2. Selanjutnya kita akan mengatur tampilan layoutnya. Buka folder res/layout pada project kalian dan buka file “editdata.xml”. Isikan kode berikut:
<RelativeLayout 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"
    android:background="@drawable/bgnaruto"
    tools:context=".EditData" >

<TextView
        android:id="@+id/text_id_mahasiswa"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/title_edit"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="15dp"

        />
<LinearLayout android:id="@+id/LinearLayout01"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/text_id_mahasiswa"
    android:layout_marginTop="15dp">

    <TextView
        android:id="@+id/tvnama"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingRight="29dp"
        android:text="@string/txtnama" />

    <EditText
        android:id="@+id/editText_nama"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:inputType="text"
        >
        <requestFocus />
    </EditText>
</LinearLayout>
<LinearLayout android:id="@+id/LinearLayout02"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/LinearLayout01"
    android:layout_marginTop="15dp">

    <TextView
        android:id="@+id/tvalamat"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingRight="25dp"
        android:text="@string/txtalamat" />

    <EditText
        android:id="@+id/editText_alamat"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:inputType="text"
        >
    </EditText>
</LinearLayout>
   
  
    <LinearLayout android:id="@+id/LinearLayout03"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center"
        android:layout_below="@id/LinearLayout02"
        android:layout_marginTop="15dp"
        >
        <Button
        android:id="@+id/button_save_update"
        android:layout_width="70dp"
        android:layout_height="wrap_content"
        android:layout_marginRight="10dp"
        android:text="@string/tombol_dialog_edit"
        />

    <Button
        android:id="@+id/button_cancel_update"
        android:layout_width="70dp"
        android:layout_height="wrap_content"
        android:text="@string/tombol_cancel"
        />
    </LinearLayout>

</RelativeLayout>
3. Buka “strings.xml” dan tambahkan script berikut:
    <string name="tombol_cancel">Batal</string>
    <string name="tombol_dialog_edit">Edit</string>
    <string name="tombol_dialog_delete">Hapus</string>
4. Selanjutnya buka DBDataSource.java. Kita perlu menambahkan fungsi untuk mengedit data mahasiswa dari database. Berikut ini kodenya (Tambahkan pada bagian sebelum kurung tutup terakhir) :
 //ambil satu mhs sesuai id
    public Mahasiswa getMahasiswa(long id)
      {
          Mahasiswa mahasiswa = new Mahasiswa(); //inisialisasi mhs
          //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 mhs
          mahasiswa = cursorToMahasiswa(cursor);
          //tutup sambungan
          cursor.close();
          //return mhs
          return mahasiswa;
      }
  //update mhs yang diedit
    public void updateMahasiswa(Mahasiswa k)
    {
        //ambil id barang
        String strFilter = "_id=" + k.getId();
        //memasukkan ke content values
        ContentValues args = new ContentValues();
        //masukkan data sesuai dengan kolom pada database
        args.put(DBHelper.COLUMN_NAMA, k.getNama());
        args.put(DBHelper.COLUMN_ALAMAT, k.getAlamat() );
        //update query
        database.update(DBHelper.TABLE_NAME, args, strFilter, null);
    }
 // delete mhs sesuai ID
    public void hapusDataMahasiswa(long id)
    {
        String strFilter = "_id=" + id;
        database.delete(DBHelper.TABLE_NAME, strFilter, null);
    }
5. Berikutnya buatlah file xml dengan nama “dialogview.xml”. Sesuaikan scriptnya menjadi seperti 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="horizontal"
    android:gravity="center"
    >
 
    <Button
        android:id="@+id/button_edit_data"
        android:layout_width="70dp"
        android:layout_height="wrap_content"
        android:layout_marginRight="20dp"
        android:text="@string/tombol_dialog_edit"
        />
 
    <Button
        android:id="@+id/button_delete_data"
        android:layout_width="70dp"
        android:layout_height="wrap_content"
        android:text="@string/tombol_dialog_delete"
        />
</LinearLayout>
6. Kemudian buatlah kelas “LihatData” (tanpa tanda petik) dan ganti scriptnya menjadi seperti berikut:
 package com.aina.dblatihan;

import java.util.ArrayList;

import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.app.Activity;
import android.app.Dialog;
import android.content.Intent;

public class LihatData extends Activity implements OnItemLongClickListener{
    private DBDataSource dataSource;
    ListView lvCustomList;
    private Button editButton;
    private Button delButton;
    //inisialisasi arraylist
    private ArrayList<Mahasiswa> values;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.lihatdata);
      
        lvCustomList = (ListView) findViewById(R.id.lv);
        lvCustomList.setOnItemLongClickListener(this);
        dataSource = new DBDataSource(this);
        // buka kontroller
        dataSource.open();

        // ambil semua data mhs
      
        values = dataSource.getAllMahasiswa();
        DataListAdapter contactListAdapter = new DataListAdapter(
                    LihatData.this, (ArrayList<Mahasiswa>) values);
                  lvCustomList.setAdapter(contactListAdapter);
            dataSource.close();
      
    }
    //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.dialogview);
        dialog.setTitle("Pilih Aksi");
        dialog.show();
final Mahasiswa m = (Mahasiswa) lvCustomList.getAdapter().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 OnClickListener()
                {
                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        switchToEdit(m.getId());
                        dialog.dismiss();
                    }
                }
                );
        //apabila tombol delete di klik
        delButton.setOnClickListener(
                new OnClickListener()
                {
                    @Override
                    public void onClick(View v) {
                        // Delete barang
                        dataSource.hapusDataMahasiswa(m.getId());
                        dialog.dismiss();
                        finish();
                        startActivity(getIntent());
                    }
                }
              
                );
        return true;
      
    }
    //method untuk edit data
    public void switchToEdit(long id)
    {
        Mahasiswa b = dataSource.getMahasiswa(id);
        Intent i = new Intent(this, EditData.class);
        Bundle bd = new Bundle();
        bd.putLong("id", b.getId());
        bd.putString("nama", b.getNama());
        bd.putString("alamat", b.getAlamat());
        i.putExtras(bd);
        finale();
        startActivity(i);
    }
        //method yang dipanggil ketika edit data selesai
    public void finale()
    {
       LihatData.this.finish();
        dataSource.close();
    }
    @Override
    protected void onResume() {
        dataSource.open();
        super.onResume();
    }

    @Override
    protected void onPause() {
        dataSource.close();
        super.onPause();
    }
    }
7. Selanjutnya buka kelas EditData dan atur scriptnya menjadi seperti berikut:
 package com.aina.dblatihan;

import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.app.Activity;
import android.content.Intent;

public class EditData extends Activity implements OnClickListener{
    private DBDataSource dataSource;
    
    private long id;
    private String nama;
    private String alamat;

    private EditText etNama;
    private EditText etAlamat;

    private TextView txId;

    private Button btnSave;
    private Button btnCancel;

    private Mahasiswa mhs;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.editdata);
      
        //inisialisasi variabel
        etNama = (EditText) findViewById(R.id.editText_nama);
        etAlamat = (EditText) findViewById(R.id.editText_alamat);
        txId = (TextView) findViewById(R.id.text_id_mahasiswa);
        //buat sambungan baru ke database
        dataSource = new DBDataSource(this);
        dataSource.open();
        // ambil data barang dari extras
        Bundle bun = this.getIntent().getExtras();
        id = bun.getLong("id");
        nama = bun.getString("nama");
        alamat = bun.getString("alamat");

        //masukkan data-data barang tersebut ke field editor
        txId.append(String.valueOf(id));
        etNama.setText(nama);
        etAlamat.setText(alamat);

        //set listener pada tombol
        btnSave = (Button) findViewById(R.id.button_save_update);
        btnSave.setOnClickListener(this);
        btnCancel = (Button) findViewById(R.id.button_cancel_update);
        btnCancel.setOnClickListener(this);
    }

     @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            switch(v.getId())
            {
                // apabila tombol save diklik (update mhs)
                case R.id.button_save_update :
                    mhs = new Mahasiswa();
                    mhs.setAlamat(etAlamat.getText().toString());
                    mhs.setNama(etNama.getText().toString());
                 
                    mhs.setId(id);
                    dataSource.updateMahasiswa(mhs);
                    Intent i = new Intent(this, LihatData.class);
                    startActivity(i);
                    EditData.this.finish();
                    dataSource.close();
                    break;
                            // apabila tombol cancel diklik, finish activity
                case R.id.button_cancel_update :
                    finish();
                    dataSource.close();
                    break;
            }
        }
}
8. Jalankan Aplikasi dan pilih menu Lihat Data. Kemudian tekan dan tahan pada salah satu data mahasiswa maka akan keluar dialog view yang berisi pilihan aksi untuk Edit atau Hapus.
   Apabila dipilih aksi Edit maka akan menuju ke Activity Edit Data. Berikut ini tampilannya:
   (Misalnya kita akan mengedit alamat dari mahasiswa dengan nama Nabila)
 




Apabila dipilih aksi Hapus maka data mahasiswa yang terpilih akan terhapus (hilang dari daftar mahasiswa). Berikut ini adalah tampilan ketika data mahasiswa dengan nama nabila dihapus. Hanya tersisa satu mahasiswa saja pada daftar mahasiswa.

Fin.
Happy Coding.
Alhamdulillah.

Jum'at, 24 Januari 2014
22:00

2 comments:

  1. Bagus banget mbak ini
    Kalo boleh saya minta source code nya mbak buat refrensi tugas akhir
    Ke email adysupri737@gmail.com

    ReplyDelete
  2. This comment has been removed by a blog administrator.

    ReplyDelete