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.
Bagi kalian yang baru mengikuti tutorial ini, kalian dapat memulai mengikuti tutorial sebelumnya sampai dengan tutorial ini pada link dibawah ini :
- Tutorial Membuat Aplikasi Mobile GIS Menggunakan Android Studio: Project Baru [Bagian 1]
- Tutorial Membuat Aplikasi Mobile GIS Menggunakan Android Studio: Membuat Splashscreen  [Bagian 2]
- Tutorial Membuat Aplikasi Mobile GIS Menggunakan Android Studio: Mendapatkan API Key Google Maps [Bagian 3]
- Tutorial Membuat Aplikasi Mobile GIS Menggunakan Android Studio: Menu Utama [Bagian 4]
- Tutorial Membuat Aplikasi Mobile GIS Menggunakan Android Studio: Membuat Google Maps Activity [Bagian 5]
- Tutorial Membuat Aplikasi Mobile GIS Menggunakan Android Studio: Membuat Database [Bagian 6]
- Tutorial Membuat Aplikasi Mobile GIS Menggunakan Android Studio: APIÂ [Bagian 7]
- Tutorial Membuat Aplikasi Mobile GIS Menggunakan Android Studio: Menampilkan Marker Studio pada Maps [Bagian 8]
- Tutorial Membuat Aplikasi Mobile GIS Menggunakan Android Studio: Detail Studio Activity [Bagian 9]
- Tutorial Membuat Aplikasi Mobile GIS Menggunakan Android Studio: Fitur Share & Call [Bagian 10]
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 :
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 :
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 Project. Jika 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.