Android Academy · Pelajaran

Proto DataStore

Simpan data berstruktur yang mempunyai jenis.

Pelajaran 4 daripada 413 langkah

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 Serializer dengan defaultValue
  • 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.

Percuma untuk bermula

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.

Semua pelajaran dalam kursus ini

  1. DataStore berbanding SharedPreferences
  2. DataStore Keutamaan
  3. Membaca dan Menulis Tetapan
  4. Proto DataStore
← Kembali ke Android Academy