Proto DataStore
Simpan data berstruktur yang mempunyai jenis.
Proto DataStore ialah pelajaran Android Academy percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Android Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Android Academy merangkumi sejumlah 4 pelajaran.
Proto DataStore
Proto DataStore menyimpan objek berstruktur yang ditaip dengan kukuh, bukannya pasangan kunci-nilai yang longgar. Anda menentukan skema dan DataStore menyimpan satu objek yang ditaip bagi setiap fail.
Ia sesuai apabila tetapan anda membentuk model yang koheren.
Sebab Data yang Ditaip
Preferences DataStore tidak ditaip: kesilapan ejaan pada kunci atau pembacaan jenis yang salah hanya gagal semasa masa jalan. Proto DataStore memberikan anda keselamatan jenis semasa masa kompilasi untuk keseluruhan objek tetapan.
- Tiada kunci rentetan yang boleh tersalah eja
- Nilai lalai ditentukan dalam skema
- Medan yang mudah difaktorkan semula
Memilih Format Pensiri
Pendekatan klasik menggunakan Protocol Buffers (proto) untuk menentukan skema. Anda juga boleh membuat pensirian dengan kotlinx.serialization atau sebarang format tersuai. Skema menerangkan medan dan jenis.
Menentukan Skema Proto
Anda menulis fail .proto yang menerangkan mesej tetapan anda. Pengkompil protobuf menjana kelas Kotlin/Java daripadanya.
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;
}Melaksanakan Pensiri
DataStore memerlukan Serializer yang mengetahui cara membaca dan menulis jenis anda ke dalam aliran, serta defaultValue yang digunakan apabila fail 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)
}Mencipta Proto DataStore
Gunakan delegat dataStore (bukan preferencesDataStore), dengan menghantar nama fail dan pensiri anda.
val Context.settingsStore: DataStore<UserSettings> by dataStore(
fileName = "user_settings.pb",
serializer = UserSettingsSerializer
)Membaca Data yang Ditaip
Bacaan dibuat melalui settingsStore.data, tetapi kini jenis aliran ialah model anda. Tiada kunci atau penukaran jenis; hanya akses medan secara langsung.
val darkMode: Flow<Boolean> = context.settingsStore.data
.map { settings -> settings.darkMode }Menulis dengan updateData
Proto DataStore menggantikan edit dengan fungsi suspend updateData. Anda menerima objek semasa dan mengembalikan objek baharu. Dengan protobuf, anda menggunakan pembina yang dijana.
suspend fun setDarkMode(enabled: Boolean) {
context.settingsStore.updateData { current ->
current.toBuilder()
.setDarkMode(enabled)
.build()
}
}Kemas Kini Tidak Boleh Ubah
Perhatikan bahawa anda tidak pernah mengubah objek sedia ada; anda membina dan mengembalikan objek baharu. Sifat tidak boleh ubah inilah yang menjadikan kemas kini bersifat transaksi dan konsisten merentas pemerhati.
Mengendalikan Kerosakan
Jika fail yang disimpan menjadi tidak boleh dibaca, DataStore melontarkan CorruptionException. Anda boleh menyediakan corruptionHandler yang mengembalikan nilai lalai yang selamat dan bukannya menyebabkan aplikasi ranap.
val Context.settingsStore by dataStore(
fileName = "user_settings.pb",
serializer = UserSettingsSerializer,
corruptionHandler = ReplaceFileCorruptionHandler {
UserSettings.getDefaultInstance()
}
)Preferences berbanding Proto
Pilih berdasarkan keperluan anda:
- Preferences: beberapa bendera yang tidak berkaitan, persediaan pantas, tiada skema
- Proto: model tetapan berstruktur, keselamatan jenis, nilai lalai yang ditentukan
Kedua-duanya berkongsi asas yang sama, iaitu tak segerak, berasaskan transaksi dan Flow.
Semakan Pantas
Uji pemahaman anda tentang Proto DataStore.
Imbas Kembali
Anda telah mempelajari cara menyimpan data yang ditaip dengan Proto DataStore:
- Tentukan skema, biasanya dengan Protocol Buffers
- Laksanakan
SerializerdengandefaultValue - Cipta stor melalui delegat
dataStore - Baca medan secara langsung; tulis dengan
updateData - Kendalikan kerosakan dengan pengendali yang mengembalikan nilai lalai
Anda telah menamatkan kursus DataStore.
Pelajari Kotlin dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 36
- Pelajaran
- 152
Soalan Lazim
Adakah pelajaran “Proto DataStore” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Android Academy, termasuk “Proto DataStore”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Android Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Proto DataStore”?
Simpan data berstruktur yang mempunyai jenis. Anda berlatih Android Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Android Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Android Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.
Berapa lamakah pelajaran “Proto DataStore” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Android Academy ini?
Ya. Setiap pelajaran Android Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.