Tuesday, January 1, 2019

MOBILE COMPUTING : APLIKASI CRUD DAFTAR BELANJA MENGGUNAKAN SQLITE

TUGAS MOBILE COMPUTING CRUD
APLIKASI DAFTAR BELANJA SEDERHANA MENGGUNAKAN SQLITE

Pada saat akan berbelanja, terkadang kita lupa barang apa saja yang harus dibeli. Kadang walau sudah menuliskan daftarnya di kertas, kadang kertas itu pun terselip atau hilang entah ke mana. Aplikasi Catatan Belanja akan membantu dalam mencatat daftar belanja kita. Kita tinggal membuka ponsel Android, lalu membuka aplikasi , dan melihat daftar belanja kita.

Dalam pembuatan aplikasi ini menggunakan aplikasi Android Studio.Project ini meliputi :
Java class 
  • MainActivity.java
  • OnClickListenerCreateCatatan.java
  • DatabaseHandler.java
  • ObjectCatatan.java
  • TableControllerCatatan.java 
  • OnLongClickListenerCatatanRecord.java

Layout:
  • Activity_main.xml
  • Catatan_input_form.xml

Membuat Desain Form pada Activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/buttonCreateCatatan"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="110dp"
        android:layout_marginTop="6dp"
        android:text="Buat Daftar Belanja" />

    <TextView
        android:id="@+id/textViewRecordCount"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/buttonCreateCatatan"
        android:gravity="center"
        android:padding="1dp"
        android:text="0 Catatan Ditemukan" />
    <ScrollView
        android:id="@+id/scrollViewRecords"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textViewRecordCount" >

        <LinearLayout
            android:id="@+id/linearLayoutRecords"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

        </LinearLayout>
    </ScrollView>
</RelativeLayout>

Isikan sintaks pada MainActivity.java


import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;

import java.util.List;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button buttonCreateCatatan = (Button) findViewById(R.id.buttonCreateCatatan);
        buttonCreateCatatan.setOnClickListener(new OnClickListenerCreateCatatan());
        countRecords();
        readRecords();
    }
    public void countRecords() {
        int recordCount = new TableControllerCatatan(this).count();
       TextView textViewRecordCount = (TextView) findViewById(R.id.textViewRecordCount);
       textViewRecordCount.setText(recordCount + " Catatan Ditemukan.");
    }
    public void readRecords() {

        LinearLayout linearLayoutRecords = (LinearLayout) findViewById(R.id.linearLayoutRecords);
        linearLayoutRecords.removeAllViews();

        List<ObjectCatatan> catatan = new TableControllerCatatan(this).read();

        if (catatan.size() > 0) {

            for (ObjectCatatan obj : catatan) {

                int id = obj.id;
                String NamaCatatan = obj.nama_brg;
                String JumlahBrg = obj.jumlah;

                String textViewContents = NamaCatatan + " - " + JumlahBrg;

                TextView textViewCatatanItem= new TextView(this);
                textViewCatatanItem.setPadding(0, 10, 0, 10);
                textViewCatatanItem.setText(textViewContents);
                textViewCatatanItem.setTag(Integer.toString(id));
                textViewCatatanItem.setOnLongClickListener(new OnLongClickListenerCatatanRecord());
                linearLayoutRecords.addView(textViewCatatanItem);
            }

        }

        else {

            TextView locationItem = new TextView(this);
            locationItem.setPadding(8, 8, 8, 8);
            locationItem.setText("No records yet.");

            linearLayoutRecords.addView(locationItem);
        }

    }
}


Buat class OnClickListenerCreateCatatan.java pada package yang telah dibuat 
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class OnClickListenerCreateCatatanimplements View.OnClickListener {
    @Override

    public void onClick(View view) {

        final Context context = view.getRootView().getContext();
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        final View formElementsView = inflater.inflate(R.layout.Catatan_input_form, null, false);
        final EditText editTextNamaCatatan = (EditText) formElementsView.findViewById(R.id.editTextNamaCatatan);
        final EditText editTextJumlahBrg = (EditText) formElementsView.findViewById(R.id.editTextJumlahBrg);

        new AlertDialog.Builder(context)

                .setView(formElementsView)
                .setTitle("Create Catatan")
                .setPositiveButton("Add",
                        new DialogInterface.OnClickListener() {

                            public void onClick(DialogInterface dialog, int id) {
                                String NamaCatatan = editTextNamaCatatan.getText().toString();
                                String JumlahBrg = editTextJumlahBrg.getText().toString();
                                dialog.cancel();
                                ObjectCatatan objectCatatan = new ObjectCatatan();
                                objectCatatan.nama_brg = NamaCatatan;
                                objectCatatan.jumlah = JumlahBrg;
                                boolean createSuccessful = new TableControllerCatatan(context).create(objectCatatan);
                                ((MainActivity) context).readRecords();

                                dialog.cancel();

                                if(createSuccessful){
                                    Toast.makeText(context, "Catatan berhasil disimpan", Toast.LENGTH_SHORT).show();
                                }else{
                                    Toast.makeText(context, "gagal simpan Catatan ", Toast.LENGTH_SHORT).show();
                                    ((MainActivity) context).countRecords();
                                    ((MainActivity) context).readRecords();
                                }
                            }


                        }).show();

}

    }   


Membuat form input Catatan

Klik kanan pada res / layout / directory Anda> Klik "New"> Klik "File"> Beri nama "Catatan_input_form.xml" dan masukkan 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" >

    <EditText

        android:id="@+id/editTextNamaCatatan"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:hint="NamaCatatan "
        android:singleLine="true" >

        <requestFocus />

    </EditText>

    <EditText

        android:id="@+id/editTextJumlahBrg"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/editTextNamaCatatan"
        android:hint="Catatan jumlah"
        android:singleLine="true" />

</RelativeLayout>



Membuat class DatabaseHandler.java untuk penanganan Database
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DatabaseHandler extends SQLiteOpenHelper {

    private static final int DATABASE_VERSION = 1;
    protected static final String DATABASE_NAME = "CatatanDatabase";

    public DatabaseHandler(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        String sql = "CREATE TABLE catatan " +
                "( id INTEGER PRIMARY KEY AUTOINCREMENT, " +
                "nama_brg TEXT, " +
                "jumlah TEXT ) ";

        db.execSQL(sql);

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        String sql = "DROP TABLE IF EXISTS catatan";
        db.execSQL(sql);

        onCreate(db);
    }

}


Membuat ObjectCatatan.java dengan kode berikut :
public class ObjectCatatan {

    int id;
    String nama_brg;
    String jumlah;

    public ObjectCatatan(){

    }
}



Membuat class baru yaitu TableControllerCatatan.java,File ini akan mengontrol semua operasi yang terkait dengan tabel catatan yang berisikan sintak sebagai berikut :



import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import java.util.ArrayList;
import java.util.List;

public class TableControllerCatatan extends DatabaseHandler {

    public TableControllerCatatan(Context context) {
        super(context);
    }


    public boolean create(ObjectCatatan objectCatatan) {

        ContentValues values = new ContentValues();

        values.put("nama_brg", objectCatatan.nama_brg);
        values.put("jumlah", objectCatatan.jumlah);

        SQLiteDatabase db = this.getWritableDatabase();

        boolean createSuccessful = db.insert("catatan", null, values) > 0;
        db.close();

        return createSuccessful;
    }
   public int count() {

       SQLiteDatabase db = this.getWritableDatabase();

      String sql = "SELECT * FROM catatan";
        int recordCount = db.rawQuery(sql, null).getCount();
       db.close();

       return recordCount;

  }
    public List<ObjectCatatan> read() {

        List<ObjectCatatan> recordsList = new ArrayList<ObjectCatatan>();

        String sql = "SELECT * FROM catatan ORDER BY id DESC";

        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(sql, null);

        if (cursor.moveToFirst()) {
            do {

                int id = Integer.parseInt(cursor.getString(cursor.getColumnIndex("id")));
                String NamaCatatan = cursor.getString(cursor.getColumnIndex("nama_brg"));
                String JumlahBrg = cursor.getString(cursor.getColumnIndex("jumlah"));

                ObjectCatatan objectCatatan = new ObjectCatatan();
                objectCatatan.id = id;
                objectCatatan.nama_brg = NamaCatatan;
                objectCatatan.jumlah = JumlahBrg;

                recordsList.add(objectCatatan);

            } while (cursor.moveToNext());
        }

        cursor.close();
        db.close();

        return recordsList;
    }
    public ObjectCatatan readSingleRecord(int CatatanId) {

        ObjectCatatan objectCatatan = null;

        String sql = "SELECT * FROM catatan WHERE id = " + CatatanId;

        SQLiteDatabase db = this.getWritableDatabase();

        Cursor cursor = db.rawQuery(sql, null);

        if (cursor.moveToFirst()) {

            int id = Integer.parseInt(cursor.getString(cursor.getColumnIndex("id")));
            String nama_brg = cursor.getString(cursor.getColumnIndex("nama_brg"));
            String jumlah = cursor.getString(cursor.getColumnIndex("jumlah"));

            objectCatatan = new ObjectCatatan();
            objectCatatan.id = id;
            objectCatatan.nama_brg = nama_brg;
            objectCatatan.jumlah = jumlah;

        }

        cursor.close();
        db.close();

        return objectCatatan;

    }
    public boolean update(ObjectCatatan objectCatatan) {


        ContentValues values = new ContentValues();

        values.put("nama_brg", objectCatatan.nama_brg);
        values.put("jumlah", objectCatatan.jumlah);

        String where = "id = ?";

        String[] whereArgs = { Integer.toString(objectCatatan.id) };

        SQLiteDatabase db = this.getWritableDatabase();

        boolean updateSuccessful = db.update("catatan", values, where, whereArgs) > 0;
        db.close();

        return updateSuccessful;

    }
    public boolean delete(int id) {
        boolean deleteSuccessful = false;

        SQLiteDatabase db = this.getWritableDatabase();
        deleteSuccessful = db.delete("catatan", "id ='" + id + "'", null) > 0;
        db.close();

        return deleteSuccessful;

    }
    }


Buat file OnLongClickListenerCatatanRecord.java baru. Digunakan untuk klik panjang untuk memberi pengguna opsi Update dan Delete



import android.content.Context;
import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class OnLongClickListenerCatatanRecord implements View.OnLongClickListener {
    Context context;
    String id;
    @Override
    public boolean onLongClick(View view) {
        context = view.getContext();
        id = view.getTag().toString();
        final CharSequence[] items = { "Edit", "Delete" };

        new AlertDialog.Builder(context).setTitle("Catatan Record")
                .setItems(items, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int item) {

                        if (item == 0) {
                            editRecord(Integer.parseInt(id));
                        }else if (item == 1) {

                            boolean deleteSuccessful = new TableControllerCatatan(context).delete(Integer.parseInt(id));

                            if (deleteSuccessful){
                                Toast.makeText(context, "Catatan berhasil dihapus", Toast.LENGTH_SHORT).show();
                            }else{
                                Toast.makeText(context, "gagal hapus Catatan ", Toast.LENGTH_SHORT).show();
                            }

                            ((MainActivity) context).countRecords();
                            ((MainActivity) context).readRecords();

                        }
                        dialog.dismiss();

                    }
                }).show();
        return false;
    }
    public void editRecord(final int CatatanId) {
        final TableControllerCatatan tableControllerCatatan = new TableControllerCatatan(context);
        ObjectCatatan objectCatatan = tableControllerCatatan.readSingleRecord(CatatanId);
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        final View formElementsView = inflater.inflate(R.layout.Catatan_input_form, null, false);
        final EditText editTextNamaCatatan = (EditText) formElementsView.findViewById(R.id.editTextNamaCatatan);
        final EditText editTextJumlahBrg = (EditText) formElementsView.findViewById(R.id.editTextJumlahBrg);
        editTextNamaCatatan.setText(objectCatatan.nama_brg);
        editTextJumlahBrg.setText(objectCatatan.jumlah);

        new AlertDialog.Builder(context)
                .setView(formElementsView)
                .setTitle("Edit Record")
                .setPositiveButton("Save Changes",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {

                                ObjectCatatan objectCatatan = new ObjectCatatan();

                                objectCatatan.id = CatatanId;
                                objectCatatan.nama_brg = editTextNamaCatatan.getText().toString();
                                objectCatatan.jumlah = editTextJumlahBrg.getText().toString();
                                boolean updateSuccessful = tableControllerCatatan.update(objectCatatan);

                                if(updateSuccessful){
                                    Toast.makeText(context, "Catatan telah diupdate", Toast.LENGTH_SHORT).show();
                                }else{
                                    Toast.makeText(context, "gagal update Catatan ", Toast.LENGTH_SHORT).show();
                                }
                                dialog.cancel();
                            }

                        }).show();
    }

}