0Pricing
Android Academy · Pelajaran

Proto DataStore

Simpan data terstruktur bertipe.

Proto DataStore adalah pelajaran Android Academy gratis di CoddyKit. Ini adalah pelajaran 4 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.

Proto DataStore

Proto DataStore menyimpan objek terstruktur bertipe kuat, bukan pasangan kunci-nilai yang tidak terstruktur. Anda mendefinisikan skema, lalu DataStore menyimpan satu objek bertipe untuk setiap file.

Ini ideal ketika pengaturan Anda membentuk model yang terpadu.

Mengapa Data Bertipe

Preferences DataStore tidak bertipe: kesalahan ketik pada kunci atau pembacaan dengan tipe yang salah baru gagal saat runtime. Proto DataStore memberikan keamanan tipe pada waktu kompilasi untuk seluruh objek pengaturan.

  • Tidak ada kunci string yang dapat salah ketik
  • Nilai bawaan ditentukan dalam skema
  • Kolom mudah difaktorkan ulang

Memilih Format Serializer

Pendekatan klasik menggunakan Protocol Buffers (proto) untuk menentukan skema. Anda juga dapat melakukan serialisasi dengan kotlinx.serialization atau format khusus apa pun. Skema menjelaskan kolom dan tipe datanya.

Mendefinisikan Skema Proto

Anda menulis file .proto yang menjelaskan pesan pengaturan. Kompilator protobuf menghasilkan kelas Kotlin/Java dari file tersebut.

syntax = "proto3";

option java_package = "com.example.app";
option java_multiple_files = true;

message UserSettings {
  bool dark_mode = 1;
  int32 font_size = 2;
  string username = 3;
}

Menerapkan Serializer

DataStore memerlukan Serializer yang mengetahui cara membaca dan menulis tipe Anda ke aliran data, serta defaultValue yang digunakan saat file kosong.

object UserSettingsSerializer : Serializer<UserSettings> {
    override val defaultValue: UserSettings = UserSettings.getDefaultInstance()

    override suspend fun readFrom(input: InputStream): UserSettings =
        UserSettings.parseFrom(input)

    override suspend fun writeTo(t: UserSettings, output: OutputStream) =
        t.writeTo(output)
}

Membuat Proto DataStore

Gunakan delegasi dataStore (bukan preferencesDataStore), dengan meneruskan nama file dan serializer Anda.

val Context.settingsStore: DataStore<UserSettings> by dataStore(
    fileName = "user_settings.pb",
    serializer = UserSettingsSerializer
)

Membaca Data Bertipe

Pembacaan dilakukan melalui settingsStore.data, tetapi sekarang tipe aliran datanya adalah model Anda. Tidak ada kunci atau konversi tipe; cukup akses kolom secara langsung.

val darkMode: Flow<Boolean> = context.settingsStore.data
    .map { settings -> settings.darkMode }

Menulis dengan updateData

Proto DataStore mengganti edit dengan fungsi suspend updateData. Anda menerima objek saat ini dan mengembalikan objek baru. Dengan protobuf, Anda menggunakan pembuat yang dihasilkan.

suspend fun setDarkMode(enabled: Boolean) {
    context.settingsStore.updateData { current ->
        current.toBuilder()
            .setDarkMode(enabled)
            .build()
    }
}

Pembaruan Tidak Dapat Diubah

Perhatikan bahwa Anda tidak pernah mengubah objek yang ada; Anda membuat dan mengembalikan objek baru. Sifat tidak dapat diubah inilah yang membuat pembaruan berlangsung secara transaksional dan konsisten di antara para pengamat.

Menangani Kerusakan Data

Jika file yang disimpan tidak dapat dibaca, DataStore akan melempar CorruptionException. Anda dapat menyediakan corruptionHandler yang mengembalikan nilai bawaan yang aman, alih-alih menyebabkan aplikasi berhenti.

val Context.settingsStore by dataStore(
    fileName = "user_settings.pb",
    serializer = UserSettingsSerializer,
    corruptionHandler = ReplaceFileCorruptionHandler {
        UserSettings.getDefaultInstance()
    }
)

Preferences atau Proto

Pilih berdasarkan kebutuhan Anda:

  • Preferences: beberapa penanda yang tidak saling berkaitan, penyiapan cepat, tanpa skema
  • Proto: model pengaturan terstruktur, keamanan tipe, nilai bawaan yang ditentukan

Keduanya menggunakan fondasi yang sama: asinkron, transaksional, dan berbasis Flow.

Pemeriksaan Singkat

Uji pemahaman Anda tentang Proto DataStore.

Rangkuman

Anda telah mempelajari cara menyimpan data bertipe dengan Proto DataStore:

  • Tentukan skema, biasanya dengan Protocol Buffers
  • Terapkan Serializer dengan defaultValue
  • Buat penyimpanan melalui delegasi dataStore
  • Baca kolom secara langsung; tulis dengan updateData
  • Tangani kerusakan dengan penangan yang mengembalikan nilai bawaan

Anda telah menyelesaikan kursus DataStore.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Proto DataStore” gratis?

Ya — teks lengkap “Proto 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 “Proto DataStore”?

Simpan data terstruktur bertipe. 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 4 dari 4.

Berapa lama pelajaran “Proto 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