Android SharedPreferences Kotlin
Android SharedPreferences – Dalam artikel yang satu ini, Kita akan mempelajari praktik terbaik SharedPreferences di Android (Kotlin). Saya akan menunjukkan kepada Anda, bagaimana kami dapat menyimpan dan mengambil nilai di SharedPreferences. Untuk pemahaman yang lebih baik, saya akan membuat contoh SharedPreferences android (Aplikasi contoh) dan mengambil contoh Nilai Menulis dan Membaca di SharedPreferences. Jadi mari kita mulai
Daftar Isi :
Apa itu SharedPreferences?
SharedPreferences adalah Android API yang menyimpan data aplikasi menggunakan pasangan nilai kunci dan menyediakan metode sederhana untuk membaca dan menulisnya.
Sistem Android menyediakan beberapa pilihan bagi Anda untuk menyimpan data Anda . Opsi ini adalah Penyimpanan khusus aplikasi , Penyimpanan bersama , Preferensi , Basis data . SharedPreferences hadir dalam Preference . Ini menawarkan kerangka kerja untuk menyimpan data pribadi dan primitif dalam pasangan nilai kunci.
Baca Juga : : RecycleView Click Listener (Kotlin)
Mengapa SharedPreferences?
Mereka sebagian besar digunakan untuk menyimpan status pengguna ketika menyangkut pengaturan pengguna atau menyimpan sepotong informasi kecil (Detail pengguna, dll.) Tanpa memerlukan izin penyimpanan. Menurut pendapat saya, Anda harus menyimpan nilai primitif kecil di Preferensi seperti boolean, int, long, float, dan string.
Untuk lebih memahaminya, kamu bisa lihat di artikel berikut ini
Contoh SharedPreferences Android di Kotlin
1. Buat proyek aplikasi android baru
Mari kita ambil contoh untuk Android SharedPreferences , buka android studio, dan buat proyek baru. Sekarang buat antarmuka bernama IPreferenceHelper. Dalam Antarmuka ini kami mendefinisikan beberapa setter pengambil untuk menyimpan atau mengambil nilai preferensi. seperti ApiKey dan UserId dll.
package com.sharedpreferencesexample interface IPreferenceHelper { fun setApiKey(apiKey: String) fun getApiKey(): String fun setUserId(userId: String) fun getUserId(): String fun clearPrefs() }
2. Buat kelas tunggal untuk mengelola Preferensi
Idealnya SharedPreferences menyimpan nilai level aplikasi, Jadi instance SharedPreferences harus membuang aplikasinya sendiri. Ini harus menjadi lajang. Mari buat kelas Singletone bernama PreferenceManager dan implementasikan IPreferenceHelper. Sama seperti di bawah ini
open class PreferenceManager constructor(context: Context) : IPreferenceHelper { private val PREFS_NAME = "SharedPreferenceDemo" private var preferences: SharedPreferences init { preferences = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE) } override fun setApiKey(apiKey: String) { preferences[API_KEY] = apiKey } override fun getApiKey(): String { return preferences[API_KEY] ?: "" } override fun setUserId(userId: String) { preferences[USER_ID] = userId } override fun getUserId(): String { return preferences[USER_ID] ?: "" } override fun clearPrefs() { preferences.edit().clear().apply() } companion object { const val API_KEY = "api_key" const val USER_ID = "user_id" } }
3. Tulis di SharedPreferences Anda
Biasanya, menulis ke SharedPreferences sederhana. Tapi saya akan menulis ekstensi Kotlin, Ekstensi ini membuat penulisan menjadi sangat sederhana dan mengurangi kode boilerplate.
/** * SharedPreferences extension function, to listen the edit() and apply() fun calls * on every SharedPreferences operation. */ private inline fun SharedPreferences.edit(operation: (SharedPreferences.Editor) -> Unit) { val editor = this.edit() operation(editor) editor.apply() } /** * puts a key value pair in shared prefs if doesn't exists, otherwise updates value on given [key] */ private operator fun SharedPreferences.set(key: String, value: Any?) { when (value) { is String? -> edit { it.putString(key, value) } is Int -> edit { it.putInt(key, value) } is Boolean -> edit { it.putBoolean(key, value) } is Float -> edit { it.putFloat(key, value) } is Long -> edit { it.putLong(key, value) } else -> throw UnsupportedOperationException("Not yet implemented") } }
4. Baca dari SharedPreferences
Membaca nilai dari SharedPreferences juga mudah. Saya akan menulis ekstensi berguna lainnya yang memberikan kontrol lebih besar untuk mengambil nilai dari SharedPreferences. Mari periksa kode di bawah ini
/** * finds value on given key. * [T] is the type of value * @param defaultValue optional default value - will take null for strings, false for bool and -1 for numeric values if [defaultValue] is not specified */ private inline operator fun <reified T : Any> SharedPreferences.get( key: String, defaultValue: T? = null ): T? { return when (T::class) { String::class -> getString(key, defaultValue as? String) as T? Int::class -> getInt(key, defaultValue as? Int ?: -1) as T? Boolean::class -> getBoolean(key, defaultValue as? Boolean ?: false) as T? Float::class -> getFloat(key, defaultValue as? Float ?: -1f) as T? Long::class -> getLong(key, defaultValue as? Long ?: -1) as T? else -> throw UnsupportedOperationException("Not yet implemented") } }
5. Akhirnya kelas PreferenceManager Anda terlihat seperti di bawah ini
package com.sharedpreferencesexample import android.content.Context import android.content.SharedPreferences open class PreferenceManager constructor(context: Context) : IPreferenceHelper { private val PREFS_NAME = "SharedPreferenceDemo" private var preferences: SharedPreferences init { preferences = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE) } override fun setApiKey(apiKey: String) { preferences[API_KEY] = apiKey } override fun getApiKey(): String { return preferences[API_KEY] ?: "" } override fun setUserId(userId: String) { preferences[USER_ID] = userId } override fun getUserId(): String { return preferences[USER_ID] ?: "" } override fun clearPrefs() { preferences.edit().clear().apply() } companion object { const val API_KEY = "api_key" const val USER_ID = "user_id" } } /** * SharedPreferences extension function, to listen the edit() and apply() fun calls * on every SharedPreferences operation. */ private inline fun SharedPreferences.edit(operation: (SharedPreferences.Editor) -> Unit) { val editor = this.edit() operation(editor) editor.apply() } /** * puts a key value pair in shared prefs if doesn't exists, otherwise updates value on given [key] */ private operator fun SharedPreferences.set(key: String, value: Any?) { when (value) { is String? -> edit { it.putString(key, value) } is Int -> edit { it.putInt(key, value) } is Boolean -> edit { it.putBoolean(key, value) } is Float -> edit { it.putFloat(key, value) } is Long -> edit { it.putLong(key, value) } else -> throw UnsupportedOperationException("Not yet implemented") } } /** * finds value on given key. * [T] is the type of value * @param defaultValue optional default value - will take null for strings, false for bool and -1 for numeric values if [defaultValue] is not specified */ private inline operator fun <reified T : Any> SharedPreferences.get( key: String, defaultValue: T? = null ): T? { return when (T::class) { String::class -> getString(key, defaultValue as? String) as T? Int::class -> getInt(key, defaultValue as? Int ?: -1) as T? Boolean::class -> getBoolean(key, defaultValue as? Boolean ?: false) as T? Float::class -> getFloat(key, defaultValue as? Float ?: -1f) as T? Long::class -> getLong(key, defaultValue as? Long ?: -1) as T? else -> throw UnsupportedOperationException("Not yet implemented") } }
6. Akses PreferenceManager ke dalam lapisan presentasi Anda
Yes, Now your PreferenceManager class is ready for use. You can initialize PreferenceManager class into your ViewModel and Activity/Fragment, Make sure the context should be applicationContext.
7.Buka activity_main.xml dan paste kode di bawah ini.
Untuk membuat contoh yang menarik, saya telah menambahkan dua teks edit dan satu tombol di tata letak ini
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout 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" android:padding="16dp" tools:context=".MainActivity"> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" tools:text="Hello World!" /> <EditText android:id="@+id/editText" android:layout_width="0dp" android:layout_height="wrap_content" android:ems="10" android:inputType="textPersonName" android:text="User Id" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <EditText android:id="@+id/editText2" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:ems="10" android:inputType="textPersonName" android:text="API Key" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/editText" /> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="32dp" android:text="Show Preference Data" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/editText2" /> </androidx.constraintlayout.widget.ConstraintLayout>
8. Biarkan akses kelas PreferenceManager di file sumber Anda
Mari kita periksa kode di bawah ini Dengan cara ini Anda dapat dengan mudah membaca dan menulis nilainya di SharePreferences
package com.sharedpreferencesexample import android.annotation.SuppressLint import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import kotlinx.android.synthetic.main.activity_main.* class MainActivity : AppCompatActivity() { private val preferenceHelper: IPreferenceHelper by lazy { PreferenceManager(applicationContext) } @SuppressLint("SetTextI18n") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // display saved data textView.text = " API Key - > ${preferenceHelper.getApiKey()} \n User Id -> ${preferenceHelper.getUserId()}" button.setOnClickListener { // Update data in SharedPreference preferenceHelper.setApiKey(editText.text.toString()) preferenceHelper.setUserId(editText2.text.toString()) // display saved data textView.text = " API Key - > ${preferenceHelper.getApiKey()} \n User Id -> ${preferenceHelper.getUserId()}" } } }
7. Build & Test
Biarkan menjalankan aplikasi, dalam gerakan aplikasi Anda akan aktif dan berjalan, Sekarang masukkan beberapa nilai EditText ini dan klik tombol. Nilai akan ditampilkan di TextView. Dengan cara ini Anda dapat membaca dan menulis sejumlah kecil data dalam pasangan nilai kunci!
Kesimpulan
Dalam contoh SharedPreferences android ini, kita akan mempelajari bagaimana kita dapat menyimpan dan mengambil nilai di SharedPreferences. Saya mencoba mengikuti praktik terbaik untuk pengembangan Android. Tetap saja, Anda ingin meningkatkan… Sangat Selamat datang