0Pricing
Android Academy · Pelajaran

Preferences DataStore

Simpan pengaturan key-value secara reaktif.

Preferences DataStore adalah pelajaran Android Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Android Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Android Academy mencakup 4 pelajaran total.

Preferences DataStore

Preferences DataStore menyimpan pasangan kunci-nilai sederhana, seperti SharedPreferences, tetapi dengan API asinkron modern. DataStore tidak menerapkan skema atau keamanan tipe pada keseluruhan objek.

Anda mengakses nilai melalui kunci bertipe.

Membuat DataStore

Anda membuat satu instans DataStore untuk setiap file menggunakan delegasi properti preferencesDataStore di tingkat teratas file Kotlin. name menjadi nama file di disk.

import androidx.datastore.preferences.preferencesDataStore
import androidx.datastore.preferences.core.Preferences

val Context.dataStore: DataStore<Preferences> by
    preferencesDataStore(name = "settings")

Mengapa Delegasi Tingkat Teratas

Delegasi memastikan hanya ada tepat satu instans DataStore untuk nama file tersebut dalam proses Anda. Membuat dua instans untuk file yang sama akan menimbulkan kesalahan karena keduanya akan berebut mengelola data yang sama.

Mendeklarasikannya sebagai ekstensi Context tingkat teratas menjadikannya singleton.

Kunci Preferensi

Setiap nilai memerlukan kunci bertipe. Kunci tersebut menamai entri sekaligus menetapkan tipenya. Fungsi pembantu membuat kunci untuk setiap tipe yang didukung.

import androidx.datastore.preferences.core.stringPreferencesKey
import androidx.datastore.preferences.core.booleanPreferencesKey
import androidx.datastore.preferences.core.intPreferencesKey

val USERNAME = stringPreferencesKey("username")
val DARK_MODE = booleanPreferencesKey("dark_mode")
val LAUNCH_COUNT = intPreferencesKey("launch_count")

Tipe Kunci yang Didukung

Preferences DataStore mendukung tipe kunci primitif berikut:

  • stringPreferencesKey
  • booleanPreferencesKey
  • intPreferencesKey, longPreferencesKey, floatPreferencesKey, doublePreferencesKey
  • stringSetPreferencesKey

Mendefinisikan Kunci di Satu Tempat

Pola yang umum digunakan adalah mengumpulkan semua kunci dalam sebuah object agar mudah ditemukan dan digunakan kembali, sekaligus menghindari kesalahan ketik pada nama string.

object PrefKeys {
    val USERNAME = stringPreferencesKey("username")
    val DARK_MODE = booleanPreferencesKey("dark_mode")
    val FONT_SIZE = intPreferencesKey("font_size")
}

Kunci String dan Nama Variabel

Perlu diingat bahwa argumen string (misalnya "dark_mode") adalah nilai yang ditulis ke disk. Jika Anda mengganti namanya nanti, nilai lama tidak dapat diakses. Nama val Kotlin hanya digunakan oleh kode Anda.

Satu DataStore untuk Setiap Keperluan

Anda dapat membuat beberapa DataStore untuk keperluan yang berbeda, masing-masing dengan nama file sendiri, misalnya penyimpanan "settings" dan penyimpanan "user_session". Kelompokkan kunci yang saling berkaitan.

val Context.settingsStore by preferencesDataStore(name = "settings")
val Context.sessionStore by preferencesDataStore(name = "session")

Mengakses dari Lapisan Antarmuka Pengguna

Meskipun delegasi berada pada Context, jangan membacanya secara langsung di Composable. Masukkan DataStore ke dalam repositori, lalu sediakan aliran data untuk ViewModel. Dengan demikian, antarmuka pengguna dapat diuji.

Struktur Repositori Sederhana

Membungkus DataStore dalam kelas repositori memberi Anda API yang rapi serta satu tempat untuk mendefinisikan kunci dan logika pemetaan.

class SettingsRepository(private val dataStore: DataStore<Preferences>) {
    val darkMode: Flow<Boolean> = dataStore.data
        .map { it[PrefKeys.DARK_MODE] ?: false }
}

Nilai Bawaan

Sebuah kunci mungkin belum ada, sehingga pembacaan mengembalikan null. Selalu berikan nilai bawaan dengan operator Elvis ?: saat memetakan nilai preferensi.

val fontSize: Flow<Int> = dataStore.data
    .map { prefs -> prefs[PrefKeys.FONT_SIZE] ?: 14 }

Pemeriksaan Singkat

Uji pemahaman Anda tentang kunci preferensi.

Rangkuman

Anda telah menyiapkan Preferences DataStore:

  • Buat satu instans melalui delegasi tingkat teratas preferencesDataStore
  • Tentukan kunci bertipe dengan stringPreferencesKey, booleanPreferencesKey, dan sebagainya
  • Kumpulkan kunci dalam sebuah object dan bungkus aksesnya dalam repositori
  • Selalu berikan nilai bawaan untuk kunci yang tidak ada

Selanjutnya: membaca dan menulis pengaturan tersebut.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Preferences DataStore” gratis?

Ya — teks lengkap “Preferences DataStore” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Android Academy, upgrade ke CoddyKit PRO. Kursus Android Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Preferences DataStore”?

Simpan pengaturan key-value secara reaktif. Kamu berlatih Android Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Android Academy?

Tidak diperlukan pengalaman sebelumnya. Android Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Preferences DataStore” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Android Academy ini?

Ya. Setiap pelajaran Android Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. DataStore vs SharedPreferences
  2. Preferences DataStore
  3. Membaca dan Menulis Pengaturan
  4. Proto DataStore
← Kembali ke Android Academy