Menyimpan data sederhana dengan SharedPreferences

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 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 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);