Jika Anda memiliki kumpulan nilai kunci yang relatif kecil yang ingin disimpan,
Anda harus menggunakan API SharedPreferences
.
Objek SharedPreferences
mengarah pada 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.
Catatan: API SharedPreferences
digunakan
untuk membaca dan menulis key-value pair; jangan sampai tertukar dengan
API Preference
yang membantu Anda membuat antarmuka pengguna
untuk setelan aplikasi (meskipun SharedPreferences
juga digunakan untuk menyimpan
setelan pengguna). Untuk informasi tentang
API Preference
, lihat
panduan developer untuk Setelan.
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 mudah 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);
Perhatian:
Mode MODE_WORLD_READABLE
dan
MODE_WORLD_WRITEABLE
sudah tidak digunakan lagi sejak API level 17.
Mulai Android 7.0 (API level 24), Android akan menampilkan
SecurityException
jika Anda menggunakannya. Jika aplikasi Anda perlu berbagi file pribadi dengan aplikasi lain, aplikasi tersebut dapat menggunakan FileProvider
dengan
FLAG_GRANT_READ_URI_PERMISSION
.
Untuk informasi selengkapnya, lihat juga Berbagi File.
Jika Anda menggunakan SharedPreferences
API untuk menyimpan setelan aplikasi, Anda
harus menggunakan getDefaultSharedPreferences()
untuk mendapatkan file preferensi bersama default untuk seluruh
aplikasi Anda. Untuk 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.
Catatan: Anda dapat mengedit preferensi bersama dengan cara
yang lebih aman dengan memanggil metode edit()
pada objekEncryptedSharedPreferences
bukan objek SharedPreferences
. Untuk mempelajari lebih lanjut,
lihat panduan tentang cara bekerja dengan data secara lebih
aman.
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);