DEV Community

Cover image for Working with Jetpack Data Store 🛢
Farhan Roy -- | 😁
Farhan Roy -- | 😁

Posted on

Working with Jetpack Data Store 🛢

Migrasi dari SharedPreferences API ke library Jetpack Datastore, library baru untuk solusi data storage di android

Apa itu DataStore ?

Beberapa hari lalu Google merilis library baru yang tergabung dalam jetpack component yaitu Datastore. Jetpack Component selalu menghadirkan library — library yang membuat kode android menjadi lebih baik dan minim boilerplate. Library DataStore ini yang menurut blog resmi bertujuan untuk menggantikan SharedPreferences API yang memiliki beberapa kekurangan

Library Datastore di buat dengan Coroutines dan Flowuntuk menyimpan data secara asynchronous. Datastore memungkinkan kita untuk menyimpan data key-value seperti SharedPreferences atau menyimpan data dalam bentuk typed-object (Proto Buffer)

SharedPreferences ✖️ DataStore

  • Ada beberapa keunggulan antara SharedPreferences dengan DataStore
  • DataStore menyediakan API asecara asynchronous untuk menyimpan dan membaca data, sedangkan SharedPreferences hanya menyediakan API synchronous saat membaca nilai yang diubah.
  • DataStoreaman untuk di gunakan di UI thread. Karena menggunakan Dispatchers.io
  • SharedPreferences menyebabkan runtime error sedangkan DataStore tidak

Tipe Datastore

Jetpack Datastore menyediakan 2 jenis :

  • Preference Datastore — pada jenis ini, peng-implementasiannya hampir sama dengan SharedPreferences jadi ketika menyimpan data harus menggunakan key-value
  • Proto Datastore — ini menyimpan data sebagai objek khusus. Ini memberikan keamanan tipe di luar kotak, tetapi mengharuskan kita untuk menentukan skema menggunakan buffer protokol.

Setup Project

Yang pertama kali dilakukan, tambahkan library di build.gradle

// Preferences DataStore
implementation "androidx.datastore:datastore-preferences:1.0.0-alpha01"
Enter fullscreen mode Exit fullscreen mode

Write Datastore

Sebelum menulis atau menyimpan data di datastore, kita perlu membuat / init Datastore nya dahulu dengan fungsi Context.createDataStore()

// Buat Datastore-nya
val dataStore: DataStore<Preferences> = context.createDataStore(
    name = "settings"
)

Enter fullscreen mode Exit fullscreen mode

Lalu kita bisa membuat sebuah fungsi lain untuk store data. berikut kodenya

suspend fun incrementCounter() {
    dataStore.edit { settings ->

        val currentValue = settings[COUNTER] ?: 0
        settings[COUNTER] = currentCounter + 1

    }
}
Enter fullscreen mode Exit fullscreen mode

Read data dari Datastore

DataStore memastikan bahwa data diambil di Dispatchers.IOsehingga UI Thread kita tidak diblok oleh sistem. Hal ini membuat Datastore lebih aman digunakan.
Berikut contoh kodenya:

val MY_COUNTER = preferencesKey<Int>("my_counter")
val myCounterFlow: Flow<Int> = dataStore.data
     .map { currentPreferences ->

        currentPreferences[MY_COUNTER] ?: 0   

   }
Enter fullscreen mode Exit fullscreen mode

Sekian dari saya mohon maaf bila ada kesalahan kata 😅

Top comments (0)