DEV Community

Cover image for Working with Jetpack Data Store πŸ›’
Farhan Roy -- | 😁
Farhan Roy -- | 😁

Posted on

1

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 πŸ˜…

Sentry blog image

The Visual Studio App Center’s retiring

But sadly….you’re not. See how to make the switch to Sentry for all your crash reporting needs.

Read more

Top comments (0)

Sentry growth stunted Image

If you are wasting time trying to track down the cause of a crash, it’s time for a better solution. Get your crash rates to zero (or close to zero as possible) with less time and effort.

Try Sentry for more visibility into crashes, better workflow tools, and customizable alerts and reporting.

Switch Tools

πŸ‘‹ Kindness is contagious

Please leave a ❀️ or a friendly comment on this post if you found it helpful!

Okay