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
SerializerdengandefaultValue - 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.