Menyimpan data nilai kunci

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

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 dari Context apa pun dalam aplikasi.
  • getPreferences() — Gunakan ini dari Activity 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);