Tutorial Membuat Aplikasi Mobile GIS Menggunakan Android Studio: Fitur Favorite (Database Sqlite) [Bagian 11]

Pada pembahasan kali ini penulis akan menambahkan fitur Favorite pada aplikasi GIS yang telah kita kerjakan. Fitur favorite disini berfungsi untuk menampung sebuah list yang berisi daftar studio musik yang telah dijadikan favorite oleh user.

Fitur favorite disini dapat digunakan oleh user yang telah menginstal aplikasi GIS kedalam smartphone Android mereka masing-masing, kemudian tiap user dapat memberikan favorite ke beberapa studio musik dan tiap user akan memiliki daftar favorite studio yang berbeda dengan user lainnya.

Ini merupakan alasan penulis menggunakan database Sqlite, karena tidak adanya fitur login sehingga untuk membedakan daftar studio yang akan dijadikan favorite oleh user, penulis menggunakan database internal android yaitu Sqlite.

android-sqlite

Bagi kalian yang baru mengikuti tutorial ini, kalian dapat memulai mengikuti tutorial sebelumnya sampai dengan tutorial ini pada link dibawah ini :

Jika kalian sudah sampai tutorial 10, berikut ini merupakan tahapan untuk membuat fitur Favorite menggunakan Sqlite pada Android Studio :

1. Buka project Android Studio, buat sebuah activity dan layout untuk fitur favorite. Pada app > new > acticvity > Empty Activity. Beri nama Favorites. Jika sudah, maka akan terbentuk activity dan layout seperti di dalam kotak merah :

favorites

2. Selanjutnya, buat 2 buah file java untuk Database Sqlite dan 1 sebagai tempat penampung variabel yang akan diterima dari API. Untuk database Sqlite beri nama DBHelper dan DBDataSource, kemudian untuk activity penampung variabel beri nama StudioMusik.java. Seperti di bawah ini :

sqlite activity

3. Langkah selanjutnya adalah mengisi ketiga activity yang sudah dibuat dengan skrip. Berikut ini merupakan Soure Code nya :

  • Source Code untuk StudioMusik.java :
public class StudioMusik {

    private long id;
    private String nama;
    private String alamat;
    private String harga;
    private String gambar;
    private String jam, call, alatmusik, lastupdate, ratingalat, ratingrecording, ratingtempat, latitude, longitude;
    private String fav;

    public StudioMusik() {
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getNama() {
        return nama;
    }

    public void setNama(String nama) {
        this.nama = nama;
    }

    public String getAlamat() {
        return alamat;
    }

    public void setAlamat(String alamat) {
        this.alamat = alamat;
    }

    public String getHarga() {
        return harga;
    }

    public void setHarga(String harga) {
        this.harga = harga;
    }

    public String getGambar() {
        return gambar;
    }

    public void setGambar(String gambar) {
        this.gambar = gambar;
    }

    //
    public String getCall() {
        return call;
    }

    public void setCall(String call) {
        this.call = call;
    }

    public String getJam() {
        return jam;
    }

    public void setJam(String jam) {
        this.jam = jam;
    }

    public String getAlatmusik() {
        return alatmusik;
    }

    public void setAlatmusik(String alatmusik) {
        this.alatmusik = alatmusik;
    }

    public String getLastupdate() {
        return lastupdate;
    }

    public void setLastupdate(String lastupdate) {
        this.lastupdate = lastupdate;
    }

    public String getRatingalat() {
        return ratingalat;
    }

    public void setRatingalat(String ratingalat) {
        this.ratingalat = ratingalat;
    }

    public String getRatingrecording() {
        return ratingrecording;
    }

    public void setRatingrecording(String ratingrecording) {
        this.ratingrecording = ratingrecording;
    }

    public String getRatingtempat() {
        return ratingtempat;
    }

    public void setRatingtempat(String ratingtempat) {
        this.ratingtempat = ratingtempat;
    }

    public String getLatitude() {
        return latitude;
    }

    public void setLatitude(String latitude) {
        this.latitude = latitude;
    }

    public String getLongitude() {
        return longitude;
    }

    public void setLongitude(String longitude) {
        this.longitude = longitude;
    }

    public String getFav() {
        return fav;
    }

    public void setFav(String fav) {
        this.fav = fav;
    }
}

Pada skrip diatas berfungsi untuk menampung nilai variabel yang akan digunakan oleh database sqlite, dimana terdapat beberapa method untuk Get dan Set tiap variabel.

  • Source code untuk DBHelper.java :
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DBHelper extends SQLiteOpenHelper{

    public static final String TABLE_NAME = "StudioMusik";
    public static final String COLUMN_ID = "_id";
    public static final String COLUMN_NAME = "nama";
    public static final String COLUMN_ALAMAT = "alamat";
    public static final String COLUMN_HARGA = "harga";
    public static final String COLUMN_GAMBAR = "gambar";
    public static final String COLUMN_JAMLITE = "jamlite";
    public static final String COLUMN_CALLLITE = "call";
    public static final String COLUMN_ALATMUSIK = "alatmusik";
    public static final String COLUMN_LASTUPDATE = "lastupdate";
    public static final String COLUMN_RATINGALAT = "ratingalat";
    public static final String COLUMN_RATINGRECORDING = "ratingrecording";
    public static final String COLUMN_RATINGTEMPAT = "ratingtempat";
    public static final String COLUMN_LATITUDE = "latitude";
    public static final String COLUMN_LONGITUDE = "longitude";

    private static final String db_name ="studioivan.db";
    private static final int db_version=1;
    private static final String db_create = "create table "
            + TABLE_NAME + "("
            + COLUMN_ID +" integer primary key autoincrement, "
            + COLUMN_NAME+ " varchar(50) not null, "
            + COLUMN_ALAMAT+ " varchar(50) not null, "
            + COLUMN_HARGA + " varchar(50) not null,"
            + COLUMN_GAMBAR + " varchar(50) not null,"
            + COLUMN_JAMLITE + " varchar(50) not null,"
            + COLUMN_CALLLITE + " varchar(50) not null,"
            + COLUMN_ALATMUSIK + " varchar(50) not null,"
            + COLUMN_LASTUPDATE + " varchar(50) not null,"
            + COLUMN_RATINGALAT + " varchar(50) not null,"
            + COLUMN_RATINGRECORDING + " varchar(50) not null,"
            + COLUMN_RATINGTEMPAT + " varchar(50) not null,"
            + COLUMN_LATITUDE + " varchar (50) not null,"
            + COLUMN_LONGITUDE + " varchar (50) not null);";

    public DBHelper(Context context) {
        super(context, db_name, null, db_version);
        // Auto generated
    }

    //mengeksekusi perintah SQL di atas untuk membuat tabel database baru
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(db_create);
    }

    // dijalankan apabila ingin mengupgrade database
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.w(DBHelper.class.getName(),"Upgrading database from version " + oldVersion + " to "
                + newVersion + ", which will destroy all old data");
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);
    }
}

Pada skrip di atas berfungsi untuk melakukan konfigurasi awal pembuatan database Sqlite pada program. Dimana di dalamnya berisi nama database, nama tabel, dan field-field apa saja yang dibutuhkan dalam program beserta tipe datanya. Pada skrip di atas juga terdapat sebuah method onUpgrade yang digunakan jika ingin mereset semua isi database sqlite jika terdapat kesalahan dalam program.

  • Source code untuk DBDataSource.java :
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;

public class DBDataSource {

    private SQLiteDatabase database;

    private DBHelper dbHelper;

    private String[] allColumns = { DBHelper.COLUMN_ID, DBHelper.COLUMN_NAME,
            DBHelper.COLUMN_ALAMAT, DBHelper.COLUMN_HARGA, DBHelper.COLUMN_GAMBAR,
            DBHelper.COLUMN_JAMLITE,
            DBHelper.COLUMN_CALLLITE,
            DBHelper.COLUMN_ALATMUSIK,
            DBHelper.COLUMN_LASTUPDATE,
            DBHelper.COLUMN_RATINGALAT,
            DBHelper.COLUMN_RATINGRECORDING,
            DBHelper.COLUMN_RATINGTEMPAT,
            DBHelper.COLUMN_LATITUDE,
            DBHelper.COLUMN_LONGITUDE
    };

    public DBDataSource(Context context)
    {
        dbHelper = new DBHelper(context);
    }

    public void open() throws SQLException {
        database = dbHelper.getWritableDatabase();
    }

    public void close() {
        dbHelper.close();
    }

    // Insert data
    public boolean insertStudioMusik(String id, String nama, String alamat, String harga, String gambar,
                                     String jam,
                                     String call,
                                     String alatmusik,
                                     String lastupdate,
                                     String ratingalat,
                                     String ratingrecording,
                                     String ratingtempat,
                                     Double latitude,
                                     Double longitude) {

        ContentValues values = new ContentValues();
        values.put(DBHelper.COLUMN_ID, id);
        values.put(DBHelper.COLUMN_NAME, nama);
        values.put(DBHelper.COLUMN_ALAMAT, alamat);
        values.put(DBHelper.COLUMN_HARGA, harga);
        values.put(DBHelper.COLUMN_GAMBAR, gambar);
        values.put(DBHelper.COLUMN_JAMLITE, jam);
        values.put(DBHelper.COLUMN_CALLLITE, call);
        values.put(DBHelper.COLUMN_ALATMUSIK, alatmusik);
        values.put(DBHelper.COLUMN_LASTUPDATE, lastupdate);
        values.put(DBHelper.COLUMN_RATINGALAT, ratingalat);
        values.put(DBHelper.COLUMN_RATINGRECORDING, ratingrecording);
        values.put(DBHelper.COLUMN_RATINGTEMPAT, ratingtempat);
        values.put(DBHelper.COLUMN_LATITUDE, latitude);
        values.put(DBHelper.COLUMN_LONGITUDE, longitude);

        long insertId = database.insert(DBHelper.TABLE_NAME,null,
                values);

        if (insertId == -1) return false;
        else return true;
    }

    //set data
    private StudioMusik cursorToStudioMusik(Cursor cursor)
    {
        StudioMusik studiomusik = new StudioMusik();
        // debug LOGCAT
        studiomusik.setId(cursor.getInt(0));
        studiomusik.setNama(cursor.getString(1));
        studiomusik.setAlamat(cursor.getString(2));
        studiomusik.setHarga(cursor.getString(3));
        studiomusik.setGambar(cursor.getString(4));
        studiomusik.setJam(cursor.getString(5));
        studiomusik.setCall(cursor.getString(6));
        studiomusik.setAlatmusik(cursor.getString(7));
        studiomusik.setLastupdate(cursor.getString(8));
        studiomusik.setRatingalat(cursor.getString(9));
        studiomusik.setRatingrecording(cursor.getString(10));
        studiomusik.setRatingtempat(cursor.getString(11));
        studiomusik.setLatitude(cursor.getString(12));
        studiomusik.setLongitude(cursor.getString(13));

        return studiomusik;
    }

    //mengambil semua data StudioMusik
    public ArrayList<StudioMusik> getStudioMusik() {
        ArrayList<StudioMusik> daftarStudioMusik = new ArrayList<StudioMusik>();

        Cursor cursor = database.query(DBHelper.TABLE_NAME,
                allColumns, null, 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()) {
            StudioMusik studioMusik = cursorToStudioMusik(cursor);
            daftarStudioMusik.add(studioMusik);
            cursor.moveToNext();
        }
        cursor.close();
        return daftarStudioMusik;
    }


    //ambil satu barang sesuai id
    public boolean isFavorite(Integer id)
    {
        StudioMusik studiomusik = new StudioMusik();
        //select query
        Cursor cursor = database.query(DBHelper.TABLE_NAME, allColumns, "_id ="+id,null, null, null, null, null);
        if (cursor.getCount()>0) return true;
        else return false;
    }

    //update studio yang diedit
    public void updateStudioMusik(StudioMusik b)
    {
        //ambil id barang
        String strFilter = "_id=" + b.getId();
        //memasukkan ke content values
        ContentValues args = new ContentValues();
        //masukkan data sesuai dengan kolom pada database
        args.put(DBHelper.COLUMN_NAME, b.getNama());
        args.put(DBHelper.COLUMN_ALAMAT, b.getAlamat());
        args.put(DBHelper.COLUMN_HARGA, b.getHarga());
        args.put(DBHelper.COLUMN_GAMBAR, b.getGambar());
        args.put(DBHelper.COLUMN_JAMLITE, b.getJam());
        args.put(DBHelper.COLUMN_CALLLITE, b.getCall());
        args.put(DBHelper.COLUMN_ALATMUSIK, b.getAlatmusik());
        args.put(DBHelper.COLUMN_LASTUPDATE, b.getLastupdate());
        args.put(DBHelper.COLUMN_RATINGALAT, b.getRatingalat());
        args.put(DBHelper.COLUMN_RATINGRECORDING, b.getRatingrecording());
        args.put(DBHelper.COLUMN_RATINGTEMPAT, b.getRatingtempat());
        args.put(DBHelper.COLUMN_LATITUDE, b.getLatitude());
        args.put(DBHelper.COLUMN_LONGITUDE, b.getLongitude());

        //update query
        database.update(DBHelper.TABLE_NAME, args, strFilter, null);
    }

    // delete studio sesuai ID
    public void deleteStudioMusik(Integer id)
    {
        String strFilter = "_id=" + id;
        database.delete(DBHelper.TABLE_NAME, strFilter, null);
    }

}

Pada skrip di atas berisi semua fungsi yang dapat dijalankan pada Sqlite, seperti open() dan close() untuk membuka dan menutup database sqlite, insert data, get data, set data, update, delete, dan menjadikan method untuk menentukan sebuah studio menjadi favorite.

4. Jika berhasil, lakukan Rebuild Project, dengan memilih Build (pada menu bar) > Rebuild ProjectJika tidak terdapat error maka kalian telah berhasil membuat database Sqlite.

Untuk tutorial selanjutnya adalah membuat tampilan favorite, yaitu tampilan list menggunakan Recyclerview, kemudian data dari API akan di insert kedalam database local Sqlite, melakukan setting Fav dan Unfav, dan terakhir adalah memasangkan data yang ada pada database Sqlite ke list Favorite. Jadi, tunggu tutorial selanjutnya.

Komentar

Leave a Reply

Your email address will not be published. Required fields are marked *

Inwepo adalah media platform yang membantu setiap orang untuk belajar dan berbagi tutorial, tips dan trik cara penyelesaian suatu masalah di kehidupan sehari-hari dalam bentuk teks, gambar. dan video.

Dengan bergabung bersama kami dan membuat 1 tutorial terbaik yang kamu miliki dapat membantu jutaan orang di Indonesia untuk mendapatkan solusinya. Ayo berbagi tutorial terbaikmu.

Ikuti Kami di Sosmed

Copyright © 2020 Inwepo - All Rights Reserved.

To Top