Menggunakan Class Shared Preferences Kotlin Android

Diposting Pada : 17 Maret 2021

Android menyediakan banyak media penyimpanan data yang dapat kita gunakan untuk berbagai kasus dan kebutuhan. Karakter penyimpanan bersifat key-value storage, Sehingga hanya bisa menyimpan data bertipe primitif (floatintlongstringboolean). Metode penyimpanan ini tergolong sangat minimalis dan sangat cocok untuk penyimpanan data yang sedikit. Shared preferences merupakan session di android, misal bisa kita gunakan untuk menyimpan token saat login melalui web service API.

Kali ini saya akan menjelaskan shared preference dengan penerapan sederhana hingga membuat class khusus untuk management session, sehingga apabila kita akan menggunakan fitur shared preferences di dalam development lanjutan akan menjadi lebih mudah.

  1. Shared Preference Dasar dengan Cara Sederhana

Secara sederhana, untuk menggunakan shared preference, kita hanya membutuhkan script di bawah ini untuk melakukan write data. Katakanlah, saya beri nama session tersebut "primbon_session" dan akan menyimpan data berupa "token" berbentuk string.

val sharedPreference =  getSharedPreferences("primbon_session",Context.MODE_PRIVATE)
val editor = sharedPreference.edit()
editor.putString("token", "abrakadabra")
editor.apply()

Kemudian untuk mengambil data tersebut, di beberapa halaman atau class lain kita perlu read session dengan cara memanggil nama session serta key yang disimpan seperti demikian :

val sharedPreference =  activity?.getSharedPreferences("primbon_session", Context.MODE_PRIVATE)
val spToken = sharedPreference?.getString("token", "")
Log.d("token_saya", spToken.toString())

spToken merupakan variabel yang bisa kita panggil. Variabel ini berisi token yang kita simpan dengan menggunakan shared preferences tadi. Kemudian, apabila kita ingin menghapus session "token" apabila sudah tidak terpakai, bisa menggunakan remove. Apabila semua key di dalam shared preference "primbon_session" kita bisa menggunakan clear() seperti kode di bawah ini. Jadi, kalau hanya menghapus value token saja, maka tidak perlu clear().

val sharedPreference =  activity?.getSharedPreferences("primbon_session", Context.MODE_PRIVATE)
sharedPreference?.edit { remove("token") }
sharedPreference?.edit()?.clear()

2. Advanced Shared Preference dengan Menggunakan Kelas Khusus

Kode pada point 1 bisa digunakan bila aplikasi Anda masih tergolong sederhana. Misal hanya mempunyai 2-3 halaman saja. Namun, apabila Anda sudah bermain di proyek menengah ke atas, kode tersebut menjadi kurang efisien. Karena di setiap halaman, anda harus mendeclare getSharedPreferences("ac_session", Context.MODE_PRIVATE). Saat melakukan write, Anda juga harus selalu apply atau commit. Di awal mungkin kita akan merasa ribet, tetapi apa yang akan kita buat bersifat dinamis dan ke depan akan lebih memudahkan kita dalam melakukan maintenance program.

Pada kesempatan ini, kita membutuhkan 2 kelas utama, yakni kelas untuk management shared preference yang akan saya beri nama SessionManager, serta kelas CustomApplication yang merupakan class application. Kelas application adalah kelas dasar dalam aplikasi Android yang berisi semua komponen lain seperti aktivitas dan layanan. Kelas application, atau setiap subkelas dari kelas application, dibuat sebelum kelas lain ketika proses onCreate aplikasi / paket Anda. Sebaiknya nama class application disesuaikan dengan nama aplikasi Anda, misal anda membuat aplikasi bernama Primbon, beri saja kelas tersebut nama PrimbonApplication.

SessionManager berisi fungsi seperti di bawah ini:

class SessionManager(internal var _context: Context) {
    internal var pref: SharedPreferences
    internal var editor: SharedPreferences.Editor
    internal var PRIVATE_MODE = 0

    init {
        pref = _context.getSharedPreferences(PREF_NAME, PRIVATE_MODE)
        editor = pref.edit()
    }

    fun saveInteger(key: String, value: Int) {
        editor.putInt(key, value)
        editor.commit()
    }

    fun getInteger(key: String): Int {
        return pref.getInt(key, 0)
    }

    fun saveString(key: String, value: String) {
        editor.putString(key, value)
        editor.commit()
    }

    fun getString(key: String): String? {
        return pref.getString(key, "")
    }

    fun saveBoolean(key: String, value: Boolean) {
        editor.putBoolean(key, value)
        editor.commit()
    }

    fun getBoolean(key: String): Boolean {
        return pref.getBoolean(key, false)
    }

    fun clearSession() {
        editor.clear()
        editor.commit()
    }

    fun removeSession(string: String){
        editor.remove(string).commit()
    }

    companion object {
        private val PREF_NAME = "primbon_session"
        val SESSION_TOKEN = "token"
    }
}

Nama untuk shared preferences merupakan sebuah konstanta yang bisa diubah-ubah melalui PREF_NAME, apabila kita mau menambahkan key seperti token, tambahkan saja dengan variabel baru misal SESSION_TOKEN. Keuntungan di sini, akan meminimalisasi typo karena kita sudah mengatur konstanta di kelas khusus. Dalam kelas tersebut juga sudah menyediakan fitur untuk write, read, remove dan clear. Sebelum kita melanjutkan pada penggunaanya, terlebih dahulu kita buat application class seperti demikian :

class PrimbonApplication : Application() {
    companion object {
        lateinit var sessionManager: SessionManager
        private lateinit var context: Context
    }

    override fun onCreate() {
        super.onCreate()
        context = this
        sessionManager = SessionManager(context)
    }
}

Kemudian, untuk menggunakan class SessionManager tersebut kita cukup panggil saja sesuai apa yang kita butuhkan. Apabila kita akan melakukan :

a. Write data

PrimbonApplication.sessionManager.saveString(SESSION_TOKEN,"mdabdamdabdakdada")

b. Read Data

val spToken = PrimbonApplication.sessionManager.getString(SESSION_TOKEN)

c. Remove Data

PrimbonApplication.sessionManager.removeSession(SESSION_TOKEN)

d. Clear Session

PrimbonApplication.sessionManager.clearSession()

Mudah sekali bukan??? Inilah yang dikatakan besusah-susah dahulu bersenang-senang kemudian. Kita hanya butuh 1 line saja untuk bermain dengan shared preferences.

More Post

project image
Membuat Response JSON Api dari WordPress Function

27 September 2021 - Kita semua tahu bahwa wordpress merupakan salah satu cms yang paling populer dan memiliki fitur ...
Read More

project image
Format Rupiah Menggunakan Beberapa Bahasa Pemrograman

12 Maret 2021 - Hai sobat idev, kali ini saya akan berbagi cara membuat format rupiah menggunakan javascript. Ha...
Read More

project image
Developer web aplikasi dan tutor asal Semarang

18 Agustus 2021 - Sekilas akan saya ceritakan mengenai konsep judul di atas. Di era modern seperti sekarang in...
Read More

project image
Menampilkan Gambar Google Drive via HTML

14 Maret 2021 - Bagi kamu yang memiliki web atau blog mungkin pernah terkendala karena storage penuh, atau tidak...
Read More