Menyimpan Pasangan 'Key-Value'

Menyimpan Pasangan 'Key-Value' (Pasangan antara kunci dan isi data)

Bila kita memiliki beberapa sekumpulan pasangan antara 'key-dan-values' yang ingin kita simpan, kita seharusnya menggunakan API-API 'SharePreferences'. Suatu object 'SharedPreferences' menunjuk ke suatu file yang berisi pasangan antara 'key-dan-value' dan menyediakan beberapa method sederhana untuk membaca dan menulis nilai data dan kuncinya. Masing-masing file 'SharedPrefences' di-manage oleh (application) framework Android dan bisa di-set 'private' atau 'shared'.

Latihan ini menunjukkan bagaimana kita akan menggunakan API-API 'SharedPreferences' untuk menyimpan dan mengambil nilai-nilai yang sederhana.
Catatan:
API-API 'SharedPreferences' hanya untuk membaca dan menulis pasangan 'key-dan-value' dan kita seharusnya tidak bingung antara API-API tersebut dengan API-API 'Preference' yang akan membantu kita untuk membuat 'user interface' untuk 'settings' app kita (meskipun 'settings' tersebut menggunakan 'SharedPreferences' sebagai implementasi untuk menyimpan 'settings' app).
Untuk informasi tentang bagaimana menggunakan API-API 'Preference', bisa dilihat di pedoman 'Settings'.

Mempraktikkan 'SharedPreferences' 

Kita bisa membuat suatu 'shared preference file' yang baru atau bisa juga mengakses yang sudah ada dengan memanggil salah satu dari dua method berikut:
  • 'getSharedPreferences()' - kita menggunakan method ini bila kita memerlukan beberapa 'shared preference files' yang di-identifikasi melalui nama yang kita tetapkan dengan parameter pertama. Kita bisa memanggil method ini dari 'Context' apapun di dalam app kita.
  • 'getPreference()' - kita menggunakan ini dari suatu 'Activity' bila kita hanya perlu menggunakan satu 'shared preference file' untuk 'activity' tersebut. Karena ini akan mengambil suatu 'shared preference file' default yang menjadi milik 'activity', kita tidak perlu menyebut/memberikan suatu nama.
Contohnya, kode berikut ini akan di-eksekusi di dalam suatu 'Fragment'. Kode tersebut mengakses 'shared preference file' yang diidentifikasi melalui 'resource string: R.string.preference_file_key' dan membukanya dengan menggunakan 'private mode' sehingga file bisa diakses hanya oleh app kita.

Context context = getActivity();
SharedPreferences sharedPref = context.getSharedPreferences(
        getString(R.string.preference_file_key), Context.MODE_PRIVATE);

Ketika memberi nama 'shared preference files' kita, kita seharusnya menggunakan suatu nama yang bisa diidentifikasi secara 'unique' oleh app kita, misalnya, "com.example.myapp.PREFERENCE_FILE_KEY"

Sebagai alternatif, jika kita perlu hanya satu 'shared preference file' untuk 'activity' kita, kita bisa menggunakan method 'getPreferences()':
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
Harap diperhatikan:
Bila kita membuat suatu 'shared preference file' dengan "MODE_WORLD_READABLE" atau "MODE_WORLD_WRITABLE", maka apps yang lain yang tahu 'identifier' file tersebut bisa mengakses data kita.

Menulis ke 'Shared Preferences'

Untuk menulis ke suatu 'shared preferences file', kita buat terlebih dahulu suatu 'SharedPreferences.Editor' dengan memanggil 'edit()' di 'SharedPreferences()' kita.

Lewatkan (dalam parameter) 'key' dan 'value' yang ingin kita tulis dengan method-method misalnya 'putInt()' dan 'putString()'. Kemudian kita panggil 'commit()' untuk menyimpan perubahan-perubahannya. Contohnya:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(getString(R.string.saved_high_score), newHighScore);
editor.commit();

Membaca dari 'Shared Preferences'

Untuk membaca 'value' dari suatu 'shared preferences file', kita bisa memanggil method-method misalnya 'getInt()' dan 'getString()', dengan memberikan 'key' untuk 'value' yang ingin kita baca, dan bila 'key' tidak ada, secara opsional 'value' default yang akan diambil. Contohnya:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
int defaultValue = getResources().getInteger(R.string.saved_high_score_default);
long highScore = sharedPref.getInt(getString(R.string.saved_high_score), defaultValue);
license: cc by

No comments: