Jika memiliki kumpulan nilai kunci yang relatif kecil dan ingin disimpan,
Anda dapat menggunakan API SharedPreferences
. Objek SharedPreferences
mengarah ke file yang berisi key-value pair dan memberikan metode yang cukup mudah untuk membaca
dan menulisnya. Setiap file SharedPreferences
dikelola oleh framework dan
dapat bersifat pribadi atau bersama.
Halaman ini menunjukkan cara menggunakan API SharedPreferences
untuk menyimpan dan
mengambil nilai sederhana.
Memahami preferensi bersama
Anda dapat membuat file preferensi bersama baru atau mengakses yang sudah ada dengan memanggil salah satu metode berikut:
getSharedPreferences()
: Gunakan metode ini jika Anda memerlukan beberapa file preferensi bersama yang diidentifikasi menurut nama, yang Anda tentukan dengan parameter pertama. Anda dapat memanggilnya dariContext
apa pun dalam aplikasi.getPreferences()
: Gunakan ini dariActivity
jika Anda perlu menggunakan satu file preferensi bersama untuk aktivitas tersebut. Metode ini akan mengambil file preferensi bersama default yang dimiliki oleh aktivitas sehingga Anda tidak perlu memberikan nama untuknya.
Misalnya, kode berikut mengakses file preferensi bersama yang
diidentifikasi oleh string resource R.string.preference_file_key
dan membukanya
menggunakan mode pribadi sehingga file hanya dapat diakses oleh aplikasi Anda:
Kotlin
val sharedPref = activity?.getSharedPreferences( getString(R.string.preference_file_key), Context.MODE_PRIVATE)
Java
Context context = getActivity(); SharedPreferences sharedPref = context.getSharedPreferences( getString(R.string.preference_file_key), Context.MODE_PRIVATE);
Saat memberi nama file preferensi bersama, gunakan nama yang dapat dikenali secara unik
untuk aplikasi Anda. Cara yang bagus untuk melakukan ini adalah awali nama file dengan
ID aplikasi Anda. Misalnya:
"com.example.myapp.PREFERENCE_FILE_KEY"
Atau, jika hanya perlu satu file preferensi bersama untuk aktivitas,
Anda dapat menggunakan metode getPreferences()
:
Kotlin
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE)
Java
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
Jika menggunakan SharedPreferences
API untuk menyimpan setelan aplikasi, Anda
harus menggunakan getDefaultSharedPreferences()
untuk mendapatkan file preferensi bersama default
untuk seluruh aplikasi Anda. Untuk mengetahui informasi selengkapnya, lihat
panduan developer untuk Setelan.
Menulis ke preferensi bersama
Untuk menulis ke file preferensi bersama, buat SharedPreferences.Editor
dengan memanggil edit()
pada SharedPreferences
Anda.
Teruskan semua kunci dan nilai yang ingin Anda tulis dengan metode, seperti:
putInt()
dan putString()
. Lalu, panggil apply()
atau
commit()
untuk menyimpan perubahan. Contoh:
Kotlin
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return with (sharedPref.edit()) { putInt(getString(R.string.saved_high_score_key), newHighScore) apply() }
Java
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPref.edit(); editor.putInt(getString(R.string.saved_high_score_key), newHighScore); editor.apply();
apply()
mengubah objek SharedPreferences
dalam memori secara langsung, tetapi
menulis update ke disk secara asinkron. Atau, Anda dapat menggunakan
commit()
untuk menulis data ke disk secara tersinkron. Namun, karena bersifat tersinkron,
jangan panggil commit()
dari thread utama karena hal tersebut dapat menjeda proses rendering
UI Anda.
Membaca dari preferensi bersama
Untuk mengambil nilai dari file preferensi bersama, panggil metode seperti
getInt()
dan getString()
, dengan menyediakan kunci untuk nilai
yang Anda inginkan, dan bisa juga nilai default yang akan ditampilkan jika kunci tidak ada. Contoh:
Kotlin
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return val defaultValue = resources.getInteger(R.integer.saved_high_score_default_key) val highScore = sharedPref.getInt(getString(R.string.saved_high_score_key), defaultValue)
Java
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); int defaultValue = getResources().getInteger(R.integer.saved_high_score_default_key); int highScore = sharedPref.getInt(getString(R.string.saved_high_score_key), defaultValue);