9.1: Preferensi Bersama
Daftar Isi:
- Yang harus sudah Anda KETAHUI
- Yang akan Anda PELAJARI
- Yang akan Anda LAKUKAN
- Ringkasan Aplikasi
- Tugas 1. Menjelajahi HelloSharedPrefs
- Tugas 2. Menyimpan dan memulihkan data ke preferensi bersama
- Tantangan penyusunan kode
- Rangkuman
- Konsep terkait
Preferensi bersama memungkinkan Anda membaca dan menulis data primitif dalam jumlah kecil sebagai pasangan kunci/nilai ke file pada storage perangkat. Kelas SharedPreference menyediakan API untuk mendapatkan handle ke file preferensi dan untuk membaca, menulis, dan mengelola data ini. File preferensi bersama ini sendiri dikelola oleh framework Android, dan bisa diakses oleh (dibagikan dengan) semua komponen aplikasi Anda. Akan tetapi, data tidak dibagikan dengan atau bisa diakses other aplikasi lain.
Data yang Anda simpan ke preferensi bersama berbeda dengan data di status aktivitas yang disimpan yang telah Anda pelajari di bab sebelumnya. Data di keadaan instance aktivitas dipertahankan di instance aktivitas di sesi pengguna yang sama. Preferensi bersama tetap ada di semua sesi pengguna, meskipun aplikasi Anda ditutup dan dimulai ulang atau perangkat dimulai ulang.
Gunakan preferensi bersama hanya jika Anda perlu menyimpan data dalam jumlah kecil sebagai pasangan kunci/nilai. Untuk mengelola sejumlah besar data aplikasi yang persisten, gunakan metode lain seperti database SQL yang akan Anda pelajari di bab berikutnya.
Yang harus sudah Anda KETAHUI
Dari praktik sebelumnya, Anda harus sudah memahami:
- Membuat, membangun, dan menjalankan aplikasi di Android Studio.
- Merancang layout dengan tombol dan tampilan teks.
- Menggunakan gaya dan tema.
- Menyimpan dan memulihkan keadaan instance aktivitas.
Yang akan Anda PELAJARI
Anda akan belajar:
- Mengenali apa yang dimaksud dengan preferensi bersama.
- Membuat file preferensi bersama untuk aplikasi Anda.
- Menyimpan data di preferensi bersama dan membaca preferensi tersebut kembali.
- Menghapus data di preferensi bersama.
Yang akan Anda LAKUKAN
Dalam praktik ini Anda akan:
- Menambahkan kemampuan untuk menyimpan, mengambil, dan menyetel ulang preferensi bersama ke aplikasi.
Ringkasan Aplikasi
Aplikasi HelloSharedPrefs adalah variasi lain dari aplikasi HelloToast yang telah Anda buat di Pelajaran 1. Aplikasi ini menyertakan tombol untuk menambah angka, mengubah warna latar belakang, dan menyetel ulang angka dan warna ke defaultnya. Aplikasi juga menggunakan tema dan gaya untuk mendefinisikan tombol.
Anda akan memulai dengan aplikasi awal di praktik ini dan menambahkan preferensi bersama ke kode aktivitas utama. Anda juga akan menambahkan tombol setel ulang yang akan menyetel hitungan dan warna latar belakang ke default dan menghapus file preferensi.
Tugas 1. Menjelajahi HelloSharedPrefs
Proyek aplikasi awal yang lengkap untuk praktik ini tersedia di HelloSharedPrefs-Start. Dalam tugas ini Anda akan memuat proyek ke Android Studio dan menjelajahi beberapa fitur utama aplikasinya.
1.1 Buka dan Jalankan Proyek HelloSharedPrefs
- Unduh aplikasi HelloSharedPrefs-Start dan buka zip file.
- Buka aplikasi di Android Studio.
- Bangun dan jalankan proyek di Android Studio. Coba hal-hal berikut ini:
- Klik tombol Count untuk menambah angka di tampilan teks utama.
- Klik tombol warna apa pun untuk mengubah warna latar belakang tampilan teks utama.
- Putar perangkat dan perhatikan bahwa warna latar belakang dan hitungan dipertahankan.
- Klik tombol Reset untuk menyetel warna dan hitungan kembali ke defaultnya.
- Paksa aplikasi keluar menggunakan salah satu metode berikut:
- Di Android Studio, pilih Run > Stop 'app' atau klik Ikon Berhenti di toolbar.
- Di perangkat, klik tombol Recents (tombol kota di sudut kanan bawah). Gesek kartu agar aplikasi HelloSharedPrefs keluar atau klik X di sudut kanan. Jika Anda keluar dari aplikasi dengan cara ini, tunggu beberapa detik sebelum Anda memulainya lagi sehingga sistem bisa melakukan pembersihan.
Jalankan kembali aplikasi.
Aplikasi dimulai ulang dengan penampilan default -- hitungan kembali ke 0 dan warna latar belakang abu-abu.
1.2 Jelajahi kode Aktivitas
- Buka MainActivity (java/com.example.android.simplecalc/MainActivity).
- Periksa kodenya dan catat yang berikut ini:
- Hitungan (mCount) didefinisikan oleh sebuah integer. Metode handler klik countUp() menambah nilai ini dan memperbarui TextView utama.
- Warna (mColor) juga merupakan integer yang awalnya didefinisikan sebagai abu-abu di file sumber daya colors.xml sebagai default_background.
- Metode handler klik changeBackground() mendapatkan warna latar belakang tombol yang diklik, lalu menyetel warna latar belakang TextView utama.
- Kedua integer hitungan dan warna disimpan ke bundel keadaan instance di onSaveInstanceState(), dan dipulihkan di onCreate(). Kunci bundel untuk hitungan dan warna didefinisikan oleh variabel pribadi (COUNT_KEY) dan (COLOR_KEY).
Tugas 2. Menyimpan dan memulihkan data ke file preferensi bersama
Dalam tugas ini, Anda akan menyimpan keadaan aplikasi ke file preferensi bersama dan membaca data kembali saat aplikasi dimulai ulang. Karena keadaan data yang Anda simpan di preferensi bersama (hitungan dan warna saat ini) adalah data yang sama yang Anda pertahankan di keadaan instance, Anda tidak harus melakukannya dua kali -- Anda bisa mengganti keadaan instance sekaligus dengan keadaan preferensi bersama.
2.1 Inisialisasi preferensi
Tambahkan variabel anggota ke kelas MainActivity untuk menampung nama file preferensi bersama dan sebuah referensi ke objek SharedPreferences.
private SharedPreferences mPreferences; private String sharedPrefFile = "com.example.android.hellosharedprefs";
Anda bisa menamai file preferensi bersama dengan nama apa pun yang Anda ingin, tetapi umumnya namanya sama dengan nama paket aplikasi Anda.
Di metode onCreate(), inisialisasi preferensi bersama. Pastikan Anda menyisipkan kode ini sebelum pernyataan
if
:mPreferences = getSharedPreferences(sharedPrefFile, MODE_PRIVATE);
Metode getSharedPreferences() membuka file di nama file yang diberikan (sharedPrefFile) dengan mode MODE_PRIVATE.
Catatan:Versi lama Android memiliki mode lain yang memungkinkan Anda membuat file preferensi bersama yang bisa dibaca dan ditulis oleh umum. Mode ini tidak digunakan lagi di API 17, dan sekarang sangat tidak dianjutkan karena alasan keamanan. Jika Anda perlu berbagi data dengan aplikasi lain, gunakan layanan atau penyedia konten.
Kode Solusi (Aktivitas Utama - sebagian)
public class MainActivity extends AppCompatActivity {
private int mCount = 0;
private TextView mShowCount;
private int mCurrentColor;
private SharedPreferences mPreferences;
private String sharedPrefFile = "com.example.android.hellosharedprefs";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mShowCount = (TextView) findViewById(R.id.textview);
mCurrentColor = ContextCompat.getColor(this, R.color.default_background);
mPreferences = getSharedPreferences(sharedPrefFile, MODE_PRIVATE);
// …
}
}
2.2 Simpan preferensi di onPause()
Menyimpan preferensi sangat mirip dengan menyimpan keadaan instance -- kedua operasi ini menyisihkan data ke objek Bundel sebagai pasangan kunci/nilai. Untuk preferensi bersama, Anda menyimpan data di callback daur hidup onPause() dan Anda perlu objek editor bersama (SharedPreferences.Editor) untuk menulis ke objek preferensi bersama.
- Klik baris terakhir kelas MainActivity, tepat sebelum tanda kurung penutup.
- Pilih Code > Generate, lalu pilih Override Methods.
Ketikkan "onPause", pilih tanda tangan metode untuk metode onPause() dan klik OK.
Metode onPause() kerangka ditambahkan ke titik penyisipan.
Dapatkan sebuah editor untuk objek SharedPreferences:
SharedPreferences.Editor preferencesEditor = mPreferences.edit();
Editor preferensi bersama diperlukan untuk menulis ke objek preferensi bersama. Tambahkan baris ini ke onPause() setelah panggilan ke super.onPause().
Gunakan metode putInt() untuk menempatkan integer mCount dan mCurrentColor ke dalam preferensi bersama dengan kunci yang sesuai:
preferencesEditor.putInt(COUNT_KEY, mCount); preferencesEditor.putInt(COLOR_KEY, mCurrentColor);
Kelas SharedPreferences.Editor menyertakan beberapa metode put untuk berbagai tipe data, termasuk putInt() dan putString().
Panggil apply() untuk menyimpan preferensi:
preferencesEditor.apply();
Metode apply() menyimpan preferensi secara asinkron, di luar thread UI. Editor preferensi bersama juga memiliki metode commit() untuk menyimpan preferensi secara sinkron. Metode commit() tidak disarankan karena bisa memblokir operasi lain.
- Hapus seluruh metode onSaveInstanceState(). Karena keadaan instance aktivitas berisi data yang sama dengan preferensi bersama, Anda bisa mengganti keadaan instance sekaligus.
Kode Solusi (MainActivity - metode onPause())
@Override
protected void onPause(){
super.onPause();
SharedPreferences.Editor preferencesEditor = mPreferences.edit();
preferencesEditor.putInt(COUNT_KEY, mCount);
preferencesEditor.putInt(COLOR_KEY, mColor);
preferencesEditor.apply();
}
2.3 Pulihkan preferensi di onCreate()
Seperti pada keadaan instance, aplikasi Anda membaca preferensi bersama apa pun yang disimpan di metode onCreate(). Sekali lagi, karena preferensi bersama berisi data yang sama dengan keadaan instance, kita juga bisa mengganti keadaan dengan preferensi di sini. Setiap kali onCreate() dipanggil -- saat aplikasi dimulai, saat konfigurasi berubah -- preferensi bersama digunakan untuk memulihkan keadaan tampilan.
- Cari bagian dari metode onCreate() yang menguji apakah argumen savedInstanceState adalah null dan mengembalikan keadaan instance:
if (savedInstanceState != null) { mCount = savedInstanceState.getInt(COUNT_KEY); if (mCount != 0) { mShowCountTextView.setText(String.format("%s", mCount)); } mColor = savedInstanceState.getInt(COLOR_KEY); mShowCountTextView.setBackgroundColor(mColor); }
- Hapus seluruh blok tersebut.
Di metode onCreate(), di tempat yang sama dengan kode simpan keadaan instance, dapatkan hitungan dari preferensi dengan kunci COUNT_KEY dan tetapkan ke variabel mCount.
mCount = mPreferences.getInt(COUNT_KEY, 0);
Ketika Anda membaca data dari preferensi, Anda tidak perlu mendapatkan editor preferensi bersama. Gunakan metode get apa pun pada objek preferensi bersama untuk mengambil data preferensi.
Perhatikan bahwa metode getInt() mengambil dua argumen: satu untuk kunci dan yang lain untuk nilai default jika kunci tidak bisa ditemukan. Dalam hal ini, nilai default adalah 0, yang sama dengan nilai awal mCount.
- Perbarui nilai tampilan teks utama dengan hitungan baru.
mShowCountTextView.setText(String.format("%s", mCount));
Dapatkan warna dari preferensi dengan kunci COLOR_KEY dan tetapkan ke variabel mColor.
mColor = mPreferences.getInt(COLOR_KEY, mColor);
Seperti sebelumnya, argumen kedua ke getInt() adalah nilai default yang akan dipakai dalam hal kunci tidak ada di preferensi bersama. Dalam hal ini, Anda bisa cukup menggunakan nilai mColor, yang baru diinisialisasi ke latar belakang default nanti di metode.
- Perbarui warna latar belakang tampilan teks utama.
mShowCountTextView.setBackgroundColor(mColor);
- Jalankan aplikasi. Klik tombol Count dan ubah warna latar belakang untuk memperbarui keadaan instance dan preferensi.
- Putar perangkat atau emulator untuk memverifikasi bahwa hitungan dan warna disimpan di perubahan konfigurasi.
- Paksa aplikasi keluar menggunakan salah satu metode berikut:
- Di Android Studio, pilih Run > Stop 'app'.
- Di perangkat, klik tombol Recents (tombol kota di sudut kanan bawah). Gesek kartu agar aplikasi HelloSharedPrefs keluar atau klik X di sudut kanan.
- Jalankan kembali aplikasi. Aplikasi dimulai ulang dan memuat preferensi, dengan mempertahankan keadaan.
Kode Sousi (Main Activity - onCreate())
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Initialize views, color, preferences
mShowCountTextView = (TextView) findViewById(R.id.count_textview);
mColor = ContextCompat.getColor(this, R.color.default_background);
mPreferences = getSharedPreferences(mSharedPrefFile, MODE_PRIVATE);
// Restore preferences
mCount = mPreferences.getInt(COUNT_KEY, 0);
mShowCountTextView.setText(String.format("%s", mCount));
mColor = mPreferences.getInt(COLOR_KEY, mColor);
mShowCountTextView.setBackgroundColor(mColor);
}
2.4 Setel ulang preferensi di handler klik reset()
Tombol Reset di aplikasi awal menyetel ulang hitungan dan warna untuk aktivitas ke nilai defaultnya. Karena preferensi menampung keadaan aktivitas, penting juga untuk menghapus preferensi di waktu yang sama.
- Di metode handler klik reset(), setelah warna dan hitungan disetel ulang, dapat editor untuk objek SharedPreferences:
SharedPreferences.Editor preferencesEditor = mPreferences.edit();
- Hapus semua preferensi bersama:
preferencesEditor.clear();
- Terapkan perubahan:
preferencesEditor.apply();
Kode Solusi (metode reset()):
public void reset(View view) {
// Reset count
mCount = 0;
mShowCountTextView.setText(String.format("%s", mCount));
// Reset color
mColor = ContextCompat.getColor(this, R.color.default_background);
mShowCountTextView.setBackgroundColor(mColor);
// Clear preferences
SharedPreferences.Editor preferencesEditor = mPreferences.edit();
preferencesEditor.clear();
preferencesEditor.apply();
}
Kode solusi
Proyek Android Studio: HelloSharedPrefs
Tantangan penyusunan kode
Tantangan: Ubah aplikasi HelloSharedPrefs sehingga, sebagai ganti otomatis menyimpan keadaan ke file preferensi, menambahkan aktivitas kedua untuk mengubah, menyetel ulang, dan menyimpan preferensi tersebut. Tambahkan sebuah tombol ke aplikasi yang bernama Settings untuk meluncurkan aktivitas tersebut. Sertakan tombol toggle dan spinner untuk memodifikasi preferensi dan tombol Save dan Reset untuk menyimpan dan membersihkan preferensi.
Rangkuman
- Kelas SharedPreference memungkinkan aplikasi untuk menyimpan sejumlah kecil data primitif sebagai pasangan kunci-nilai.
- Preferensi bersama bersifat persisten di semua sesi pengguna yang berbeda di aplikasi yang sama.
- Untuk menulis ke preferensi bersama, dapatkan objek SharedPreferences.Editor.
- Gunaka berbagai metode put* di objek SharedPreferences.Editor, seperti putInt() atau putString(), untuk menempatkan data ke dalam preferensi bersama dengan kunci dan nilai.
- Gunakan berbagai metode get* di objek SharedPreferences, seperti getInt() atau getString(), untuk mendapatkan data dari preferensi bersama dengan sebuah kunci.
- Gunakan metode clear() di objek SharedPreferences.Editor untuk membuang semua data yang disimpan di preferensi.
- Gunakan metode apply() di objek SharedPreferences.Editor untuk menyimpan perubahan ke file preferensi.
Konsep terkait
Dokumentasi konsep terkait ada di Dasar-Dasar Developer Android: Konsep.
Ketahui selengkapnya
- Menyimpan Data (Panduan Android)
- Opsi Storage (Panduan Android)
- Menyimpan Rangkaian Nilai-Kunci (Pelatihan Android)
- SharedPreferences (Referensi API Android)
- SharedPreferences.Editor (Referensi API Android)
- Cara menggunakan SharedPreferences di Android untuk menyimpan, mengambil, dan mengedit nilai (Stack Overflow)
- onSavedInstanceState vs. SharedPreferences(Stack Overflow)