DataStore

Menyimpan data secara asinkron, konsisten, dan transaksional, yang mengatasi beberapa kelemahan SharedPreferences
Update Terbaru Rilis Stabil Saat Ini Kandidat Rilis Berikutnya Rilis Beta Rilis Alfa
4 Agustus 2021 1.0.0 - - -

Mendeklarasikan dependensi

Untuk menambahkan dependensi pada DataStore, Anda harus menambahkan repositori Maven Google ke project Anda. Baca repositori Maven Google untuk informasi selengkapnya.

Ada dua implementasi DataStore: Preferensi dan Proto. Pilih salah satu. Anda juga dapat menambahkan dependensi bebas Android ke salah satu implementasi tersebut.

Tambahkan dependensi untuk implementasi yang diperlukan dalam file build.gradle bagi aplikasi atau modul Anda:

Datastore Diketik

Groovy

    // Typed DataStore (Typed API surface, such as Proto)
    dependencies {
        implementation "androidx.datastore:datastore:1.0.0-rc02"

        // optional - RxJava2 support
        implementation "androidx.datastore:datastore-rxjava2:1.0.0-rc02"

        // optional - RxJava3 support
        implementation "androidx.datastore:datastore-rxjava3:1.0.0-rc02"
    }

    // Alternatively - use the following artifact without an Android dependency.
    dependencies {
        implementation "androidx.datastore:datastore-core:1.0.0-rc02"
    }
    

Kotlin

    // Typed DataStore (Typed API surface, such as Proto)
    dependencies {
        implementation("androidx.datastore:datastore:1.0.0-rc02")

        // optional - RxJava2 support
        implementation("androidx.datastore:datastore-rxjava2:1.0.0-rc02")

        // optional - RxJava3 support
        implementation("androidx.datastore:datastore-rxjava3:1.0.0-rc02")
    }

    // Alternatively - use the following artifact without an Android dependency.
    dependencies {
        implementation("androidx.datastore:datastore-core:1.0.0-rc02")
    }
    

Preferensi Datastore

Groovy

    // Preferences DataStore (SharedPreferences like APIs)
    dependencies {
        implementation "androidx.datastore:datastore-preferences:1.0.0-rc02"

        // optional - RxJava2 support
        implementation "androidx.datastore:datastore-preferences-rxjava2:1.0.0-rc02"

        // optional - RxJava3 support
        implementation "androidx.datastore:datastore-preferences-rxjava3:1.0.0-rc02"
    }

    // Alternatively - use the following artifact without an Android dependency.
    dependencies {
        implementation "androidx.datastore:datastore-preferences-core:1.0.0-rc02"
    }
    

Kotlin

    // Preferences DataStore (SharedPreferences like APIs)
    dependencies {
        implementation("androidx.datastore:datastore-preferences:1.0.0-rc02")

        // optional - RxJava2 support
        implementation("androidx.datastore:datastore-preferences-rxjava2:1.0.0-rc02")

        // optional - RxJava3 support
        implementation("androidx.datastore:datastore-preferences-rxjava3:1.0.0-rc02")
    }

    // Alternatively - use the following artifact without an Android dependency.
    dependencies {
        implementation("androidx.datastore:datastore-preferences-core:1.0.0-rc02")
    }
    

Masukan

Masukan Anda membantu meningkatkan kualitas Jetpack. Beri tahu kami jika Anda menemukan masalah baru atau mempunyai masukan untuk meningkatkan kualitas library ini. Harap periksa masalah yang sudah diketahui dalam library ini sebelum membuat laporan baru. Anda dapat memberikan suara untuk masalah yang sudah diketahui dengan mengklik tombol bintang.

Laporkan masalah baru

Lihat dokumentasi Issue Tracker untuk informasi selengkapnya.

Versi 1.0.0

Versi 1.0.0

4 Agustus 2021

androidx.datastore:datastore-*:1.0.0 dirilis. Versi 1.0.0 berisi commit berikut ini.

Fitur utama 1.0.0

Jetpack DataStore adalah solusi penyimpanan data yang memungkinkan Anda menyimpan key-value pair atau objek yang diketik dengan buffering protokol. DataStore menggunakan coroutine Kotlin dan Flow untuk menyimpan data secara asinkron, konsisten, dan transaksional.

Versi 1.0.0-rc02

21 Juli 2021

androidx.datastore:datastore-*:1.0.0-rc02 dirilis. Versi 1.0.0-rc02 berisi commit berikut ini.

Perbaikan Bug

  • Mengklarifikasi bahwa SharedPreferencesMigration tidak berjalan jika tidak ada kunci. (Icfa32, b/192824325)
  • Memperbaiki bug ketika SharedPreferencesMigration yang dibuat dengan MIGRATE_ALL_KEYS akan memunculkan pengecualian jika kunci yang diminta belum ada. (Ie318a, b/192824325)

Versi 1.0.0-rc01

30 Juni 2021

androidx.datastore:datastore-*:1.0.0-rc01 dirilis. Versi 1.0.0-rc01 berisi commit berikut ini.

Perbaikan Bug

  • Memperbaiki bug yang menyebabkan file .java tidak sengaja ditambahkan ke JAR final (I65d96, b/188985637)

Versi 1.0.0-beta02

16 Juni 2021

androidx.datastore:datastore-*:1.0.0-beta02 dirilis. Versi 1.0.0-beta02 berisi commit berikut ini.

Perbaikan Bug

Versi 1.0.0-beta01

21 April 2021

androidx.datastore:datastore-*:1.0.0-beta01 dirilis. Versi 1.0.0-beta01 berisi commit berikut ini.

Perubahan API

  • Menghapus kelebihan JVM untuk metode khusus kotlin (I2adc7)

Perbaikan Bug

  • Memperbaiki bug tempat delegasi datastore dapat menyebabkan kebocoran konteks (Ie96fc, b/184415662)

Versi 1.0.0-alpha08

10 Maret 2021

androidx.datastore:datastore-*:1.0.0-alpha08 dirilis. Versi 1.0.0-alpha08 berisi commit berikut ini.

Perubahan API

  • Sekarang Anda dapat menambahkan migrasi yang bergantung pada konteks ke delegasi properti dataStore dan preferencesDataStore. (I4ef69, b/173726702)
  • Menambahkan fungsi bantuan untuk mendapatkan nama file jika Anda tidak lagi menggunakan delegasi datastore atau context.createDataStore (I60f9a)
  • Penserialisasi writeTo dan readFrom sekarang menjadi penangguhan. Jika telah menerapkan Penserialisasi, Anda harus memperbarui fungsi agar menjadi fungsi penangguhan. (I1e58e)
  • Menambahkan delegasi properti untuk pengguna RxDataStore. (Ied768, b/173726702)

Perbaikan Bug

Versi 1.0.0-alpha07

24 Februari 2021

androidx.datastore:datastore-*:1.0.0-alpha07 dirilis. Versi 1.0.0-alpha07 berisi commit berikut.

Perubahan API

  • Fungsi ekstensi Context.createDataStore telah dihapus dan diganti dengan delegasi properti globalDataStore. Panggil globalDataStore sekali di tingkat atas dalam file kotlin Anda. Contoh:

    val Context.myDataStore by dataStore(...)
    

    Letakkan ini di tingkat atas file kotlin Anda sehingga hanya ada satu instance. (I57215, b/173726702)

  • Fungsi RxDataStore sekarang berada di class RxDataStore, bukan fungsi ekstensi di DataStore. (Idccdb, b/177691248)

  • Jika ingin memigrasikan EncryptedSharedPreferences (atau booting langsung SharedPreferences) ke DataStore, kini Anda dapat melakukannya dengan konstruktor SharedPreferencesMigration baru yang memungkinkan Anda untuk memasukkan SharedPreferences. (I8e04e, b/177278510)

Perbaikan Bug

  • DataStore sekarang akan memberikan pengecualian jika ada beberapa DataStore aktif untuk file yang sama. Jika Anda tidak mengelola DataStore sebagai Singleton atau tidak memastikan bahwa tidak ada dua instance DataStore yang aktif secara bersamaan untuk suatu file, maka Anda dapat melihat pengecualian saat membaca atau menulis ke DataStore. Hal ini dapat diperbaiki dengan mengelola DataStore Anda sebagai Singleton. (Ib43f4, b/177691248)
  • Perbaiki perilaku pembatalan saat cakupan pemanggil dibatalkan. (I2c7b3)

Versi 1.0.0-alpha06

13 Januari 2021

androidx.datastore:datastore-*:1.0.0-alpha06 dirilis. Versi 1.0.0-alpha06 berisi commit berikut.

Fitur Baru

  • Menambahkan wrapper RxJava untuk DataStore. Artefak datastore-rxjava2/3 berisi wrapper untuk DataStore API inti (RxDataStore, RxDataStoreBuilder, dan RxDataMigration). Artefak datastore-preferences-rxjava2/3 berisi builder untuk menyusun Preference DataStore.

Perubahan API

  • Menyembunyikan antarmuka CorruptionHandler. Tidak ada alasan untuk menampilkannya ke publik karena factory DataStore hanya menerima ReplaceFileCorruptionHandler. (I0b3b3, b/176032264)
  • Metode preferencesKey<T>(name: String): Key<T> telah dihapus dan diganti dengan metode khusus untuk setiap jenis yang didukung, misalnya preferencesKey<Int>("int") sekarang intPreferencesKey("int") (Ibcfac, b/170311106)

Perbaikan Bug

  • Memperbaiki dokumentasi di DataStoreFactory yang mengabaikan fakta bahwa file datastore dibuat di subdirektori "datastore/". (Ica222)

Versi 1.0.0-alpha05

2 Desember 2020

androidx.datastore:datastore-*:1.0.0-alpha05 dirilis. Versi 1.0.0-alpha05 berisi commit berikut ini.

Perbaikan Bug

  • Menambahkan dokumentasi dan pengecualian yang lebih baik seputar penulisan serentak dari datastore. (Ia98a2, b/173522155, b/173726702)
  • Kini kami mengizinkan (tetapi tidak mengharuskan) OutputStream diteruskan ke Serializer.writeTo() untuk ditutup. (I5c9bf, b/173037611)

Versi 1.0.0-alpha04

17 November 2020

androidx.datastore:datastore-*:1.0.0-alpha04 dirilis. Versi 1.0.0-alpha04 berisi commit berikut ini.

Perbaikan Bug

  • Memperbaiki masalah paket yang menyebabkan error berikut di Preference Datastore 1.0.0-alpha03: java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/datastore/preferences

Versi 1.0.0-alpha03

11 November 2020

androidx.datastore:datastore-*:1.0.0-alpha03 dirilis. Versi 1.0.0-alpha03 berisi commit berikut ini.

Fitur Baru

  • Preferensi kini mendukung nilai ganda (yang berguna jika Anda lebih memerlukan presisi daripada float) (I5be8f, b/169471808)

Perubahan API

  • Membuat dependensi kotlin murni untuk datastore guna memungkinkan kompilasi yang lebih cepat. androidx.datastore:datastore-core berisi API khusus kotlin inti dan androidx.datastore:datastore berisi API yang bergantung pada android (termasuk konstruktor SharedPreferencesMigration dan Context.createDataStore.)(I42d75, b/168512698)
  • Memisahkan target untuk penyimpanan data preferensi agar kompilasi kotlin lebih cepat (Ia3c19)
  • Penserialisasi kini memerlukan properti baru untuk nilai default yang akan digunakan jika tidak ada data pada disk. Hal ini mempermudah implementasi penserialisasi kustom sehingga pengguna tidak harus memperlakukan aliran data input kosong sebagai kasus khusus (aliran data input kosong tidak diurai dengan json).

    • Selain itu, kini juga terdapat pemeriksaan untuk mengonfirmasi bahwa aliran data output yang diberikan ke writeTo() tidak ditutup, dan jika ditutup, akan ada pengecualian (I16e29)
  • Membuat konstruktor untuk internal SharedPreferencesView. Ini awalnya bersifat publik untuk mengizinkan pengujian. Sebagai gantinya, pengujian harus membuat SharedPreferencesMigration dan melakukan pengujian terhadapnya. (I93891)

Perbaikan Bug

  • Parameter produceFile pada DataStoreFactory dan PreferenceDataStoreFactory kini menjadi parameter terakhir dalam daftar sehingga memungkinkan Anda menggunakan sintaksis lambda akhir kotlin. (Ibe7f1, b/169425442)
  • Mengikuti persyaratan API eksplisit baru untuk kotlin (I5ae1e)

Masalah Umum

  • Preference Datastore mengalami error dengan java.lang.NoClassDefFoundError. (b/173036843)

Versi 1.0.0-alpha02

14 Oktober 2020

androidx.datastore:datastore-core:1.0.0-alpha02 dan androidx.datastore:datastore-preferences:1.0.0-alpha02 dirilis. Versi 1.0.0-alpha02 berisi commit berikut ini.

Perbaikan Bug

  • Menambahkan pengamanan terhadap mutasi di datastore-core. Mutasi akan menyebabkan gangguan pada penggunaan datastore untuk orang yang menggunakan datastore dengan jenis non-proto/non-preferences (I6aa84)
  • Menambahkan metode toString ke Preferences.kt agar status saat ini mudah di-debug (I96006)
  • Menambahkan pengecualian agar tidak terjadi penyalahgunaan DataStore.Preferences (I1134d)
  • Memperbaiki bug yang akan menyebabkan aplikasi mengalami error saat memulai (I69237, b/168580258)

Versi 1.0.0-alpha01

2 September 2020

androidx.datastore:datastore-core:1.0.0-alpha01 dan androidx.datastore:datastore-preferences:1.0.0-alpha01 dirilis. Versi 1.0.0-alpha01 berisi commit berikut ini.

Fitur Baru

Jetpack DataStore adalah solusi penyimpanan data baru dan telah disempurnakan yang ditujukan untuk mengganti SharedPreferences. Di-build pada coroutine Kotlin dan Flow, DataStore menyediakan dua implementasi yang berbeda:

  • Proto DataStore, yang memungkinkan Anda menyimpan objek yang diketik (didukung oleh buffering protokol)
  • Menjadikan DataStore sebagai preferensi, yang menyimpan key-value pair

Data disimpan secara asinkron, konsisten, dan transaksional, yang mengatasi sebagian besar kelemahan SharedPreferences.