Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Android SDK
Code

Komponen Arsitektur Android: Menggunakan Paging Library With Room

by
Difficulty:IntermediateLength:MediumLanguages:

Indonesian (Bahasa Indonesia) translation by Agus (you can also view the original English article)

Dalam tutorial ini, saya akan menunjukkan kepada Anda cara menggunakan Paging library dari Android Architecture Components dengan basis data Room-backed di aplikasi Android.

Anda akan belajar cara menggunakan Paging library untuk memuat kumpulan data besar secara efisien dari basis data Room-backed — memberikan pengalaman yang lebih lancar kepada users saat menggulir di RecyclerView.

Prasyarat

Untuk dapat mengikuti tutorial ini, Anda akan memerlukan:

Jika Anda belum belajar tentang architecture components, Anda sangat disarankan untuk memeriksa seri mengagumkan kami awesome series all about Android Architecture Components oleh Tin Megali. Pastikan Anda masuk untuk mendalami!

A sample project for this tutorial can be found on our GitHub repo jadi kamu bisa dengan mudah mengikutinya

Apa itu Paging Library?

Paging library adalah pustaka lain yang ditambahkan ke Architecture Components.Library membantu mengelola pemuatan dan tampilan kumpulan data besar secara efisien di RecyclerView. Menurut dokumen resmi:

Paging Library mempermudah Anda untuk memuat data secara bertahap dan anggun dalam RecyclerView aplikasi Anda.

Jika ada bagian dari aplikasi Android Anda akan menampilkan dataset besar baik dari sumber data lokal atau remote tetapi hanya menampilkan sebagian saja pada satu waktu, maka Anda harus mempertimbangkan menggunakan paging library. Ini akan membantu meningkatkan kinerja aplikasi Anda!

Jadi mengapa menggunakan Paging Library?

Sekarang setelah Anda melihat pengantar ke Paging library, Anda mungkin bertanya, mengapa menggunakannya? Berikut adalah beberapa alasan mengapa Anda harus mempertimbangkan menggunakannya dalam memuat kumpulan data besar dalam RecyclerView.

  • Ia tidak meminta data yang tidak diperlukan. Pustaka ini hanya meminta data yang terlihat oleh pengguna — saat pengguna menggulir daftar.
  • Menghemat baterai pengguna dan mengkonsumsi lebih sedikit bandwidth. Karena itu hanya permintaan data yang dibutuhkan, ini menghemat beberapa sumber daya perangkat.

Tidak akan efisien ketika bekerja dengan sejumlah besar data, sebagai sumber data yang mendasari mengambil semua data, meskipun hanya sebuah subset dari data yang akan ditampilkan kepada pengguna. Dalam situasi seperti ini, kita harus mempertimbangkan paging data sebagai gantinya.

1. Buat Proyek Android Studio

Jalankan Android Studio 3 Anda dan buat proyek baru dengan aktivitas kosong bernama MainActivity. Pastikan untuk memeriksa Include Kotlin support.

Android Studio create project screen

2. Tambahkan Komponen Arsitektur

Setelah membuat proyek baru, tambahkan dependensi berikut di build.gradle Anda. Dalam tutorial ini, kita menggunakan paging library terbaru versi 1.0.1, sementara Room is 1.1.1 (pada tulisan ini).

Artefak ini tersedia di Google Maven repositori.

Dengan menambahkan dependensi, kita diajarkan Gradle bagaimana menemukan library. Pastikan Anda ingat untuk melakukan sinkronisasi proyek Anda setelah menambahkan mereka.

3. Buat Entitas

Buat kelas data Kotlin baru Person. Demi kesederhanaan, entitas Personkita hanya memiliki dua bidang:

  • a unique ID (id)
  • the name of the person (name)

Selain itu, sertakan toString ( metode yang hanya mengembalikan name.

4. Buat DAO

Seperti yang Anda ketahui, bagi kita untuk mengakses data aplikasi kita dengan Room library, kita membutuhkan objek akses data (DAO). Dalam kasus kita sendiri, kita telah membuat PersonDao.

Di kelas PersonDao kita, kita memiliki dua metode @Query. Salah satunya adalah getAll (), yang mengembalikan LiveData yang menyimpan daftar objek Person. Yang lainnya adalah getAllPaged (), yang mengembalikan DataSource.Factory.

Menurut dokumen resmi, DataSource kelas adalah:

Kelas dasar untuk memuat halaman snapshot data ke dalam PagedList.

PagedList adalah jenis khusus dari List untuk menampilkan paged data di Android:

A PagedList adalah Daftar yang memuat datanya dalam potongan (halaman) dari DataSource. Item dapat diakses dengan get (int), dan pemuatan lebih lanjut dapat dipicu dengan loadAround (int).

Kita menyebut metode Factory statis di kelas DataSource, yang berfungsi sebagai factory (membuat objek tanpa harus menentukan kelas yang tepat dari objek yang akan dibuat) untuk DataSource. Metode statis ini mengambil dua tipe data:

  • Kunci yang mengidentifikasi item di DataSource. Perhatikan bahwa untuk Room query, halaman diberi nomor — jadi kita menggunakan Integer sebagai jenis pengenal halaman. Dimungkinkan untuk memiliki halaman "keyed" menggunakan Paging library, tetapi Room tidak menawarkannya saat ini.
  • Jenis item atau entitas (POJOs) dalam daftar dimuat oleh DataSources.

5. Buat Database

Berikut ini adalah apa Room database class kita AppDatabase terlihat seperti:

Di sini kita telah membuat satu contoh dari database kita dan mengisinya dengan data menggunakan WorkManager API baru. Perhatikan bahwa data pra-populasi hanya daftar 1.000 nama (selami kode sumber sampel yang disediakan untuk mempelajari lebih lanjut).

6. Menciptakan ViewModel

Untuk UI kita untuk disimpan, mengamati, dan melayani data dengan cara siklus hidup, kita membutuhkan ViewModel. Our Person ViewModel, yang memperluas kelas AndroidViewModel, akan berfungsi sebagai ViewModel kita .

Di kelas ini, kita memiliki satu bidang yang disebut personLiveData. Bidang ini hanyalah LiveData yang menyimpan objek PagedList of Person. Karena ini adalah LiveData, UI kita (the Activity atau Fragment) akan mengamati data ini dengan memanggil metode getter getPersonsLiveData ().

Kita diinisialisasi personsLiveData dalam blok init. Di dalam blok ini, kita mendapatkan DataSource.Factory dengan menelepon AppDatabase tunggal untuk PersonDao objek. Ketika kita mendapatkan objek ini, kita memanggil getAllPaged().

Lalu kita membuat LivePagedListBuilder. Inilah yang dikatakan dokumentasi resmi tentang LivePagedListBuilder:

Builder untuk LiveData<PagedList>,diberikanDataSource.Factory dan PagedList.Config.

Kita menyediakan konstruktornya DataSource.Factory sebagai argumen pertama dan ukuran halaman sebagai argumen kedua (dalam kasus kita sendiri, ukuran halaman akan menjadi 50). Biasanya, Anda harus memilih ukuran yang lebih tinggi daripada jumlah maksimum yang Anda mungkin menampilkan sekaligus kepada user. Pada akhirnya, kita memanggil build() untuk membangun dan kembali kepada kita LiveData<PagedList>.

7. Membuat PagedListAdapter

Untuk menampilkan data PagedList kita di RecyclerView, kita membutuhkan PagedListAdapter. Berikut ini definisi yang jelas tentang kelas ini dari dokumen resmi:

RecyclerView.Adapter kelas dasar untuk menyajikan data paged dari PagedLists di RecyclerView.

Jadi kita membuat PersonAdapter yang meluas PagedListAdapter.

PagedListAdapter digunakan seperti halnya subkelas lainnya dari RecyclerView.Adapter. Dengan kata lain, Anda harus menerapkan metode onCreateViewHolder () dan onBindViewHolder ().

Untuk memperluas kelas abstrak PagedListAdapter, Anda harus menyediakan — dalam konstruktornya — jenis PageLists (ini harus Java class lama yang biasa: POJO) dan juga kelas yang memperluas ViewHolder yang akan digunakan oleh adaptor. Dalam kasus kita, kita memberikannya Person dan PersonViewHolder sebagai argumen pertama dan kedua masing-masing.

Perhatikan bahwa PagedListAdapter mengharuskan Anda meneruskan DiffUtil.ItemCallback ke konstruktor PageListAdapter. DiffUtil adalah kelas utilitas RecyclerView yang dapat menghitung perbedaan antara dua daftar dan menampilkan daftar operasi pembaruan yang mengubah daftar pertama menjadi daftar kedua. ItemCallback adalah kelas statis abstrak internal (dalam DiffUtil) yang digunakan untuk menghitung diff antara dua item non-null dalam daftar.

Secara khusus, kita menyediakan PersonDiffCallback ke konstruktor PagedListAdapter kita.

Karena kita menerapkan DiffUtil.ItemCallback, kita harus menerapkan dua metode: isItemsTheSame () dan areContentsTheSame().

  • areItemsTheSame dipanggil untuk memeriksa apakah dua objek mewakili item yang sama. Misalnya, jika barang Anda memiliki ID unik, metode ini harus memeriksa kesetaraan id mereka. Metode ini mengembalikan nilai true jika dua item mewakili objek yang sama atau false jika keduanya berbeda.
  • areContentsTheSame dipanggil untuk memeriksa apakah dua item memiliki data yang sama. Metode ini mengembalikan nilai true jika isi itemnya sama atau false jika berbeda.

PersonViewHolder inner class kita hanyalah RecyclerView.ViewHolder biasa. Ini bertanggung jawab untuk mengikat data yang diperlukan dari model kita ke dalam widget untuk baris dalam daftar kita .

8. Menampilkan Hasil

Di our onCreate () dari MainActivity kita, kita hanya melakukan hal berikut:

  • menginisialisasi bidang viewModel kita menggunakan kelas utilitas ViewModelProviders
  • membuat sebuah instance dari PersonAdapter
  • mengkonfigurasi RecyclerView kita
  • mengikat PersonAdapter ke RecyclerView
  • amati LiveData dan kirimkan objek PagedList ke PersonAdapter dengan invoking submitList ()

Akhirnya, ketika Anda menjalankan aplikasi, inilah hasilnya:

Tutorial result screenshot

Saat menggulir, Room dapat mencegah celah dengan memuat 50 item sekaligus dan membuatnya tersedia untuk PersonAdapter kita, yang merupakan subkelas PagingListAdapter. Tetapi perhatikan bahwa tidak semua sumber data akan dimuat dengan cepat. Kecepatan pemuatan juga tergantung pada kekuatan pemrosesan perangkat Android.

9. Integrasi Dengan RxJava

Jika Anda menggunakan atau ingin menggunakan RxJava dalam proyek Anda, paging library menyertakan artifak lain yang berguna: RxPagedListBuilder. Anda menggunakan artefak ini, bukan LivePagedListBuilder untuk RxJava support.

Anda cukup membuat turunan dari RxPagedListBuilder, menyediakan argumen yang sama seperti yang Anda lakukan untuk LivePagedListBuilder DataSource.Factory dan ukuran halaman. Anda kemudian memanggil buildObservable () atau buildFlowable ()untuk mengembalikan yang Observable atau Flowable untuk PagedList Anda masing-masing.

Untuk secara eksplisit menyediakan Scheduler untuk pekerjaan pemuatan data, Anda memanggil setter method setFetchScheduler (). Untuk juga menyediakan Scheduler untuk mengirimkan hasilnya (mis. AndroidSchedulers.mainThread ()), cukup panggil setNotifyScheduler (). Secara default, setNotifyScheduler () default ke thread UI, sementara setFetchScheduler () default ke I / O thread pool.

Kesimpulan

Dalam tutorial ini, Anda belajar cara mudah menggunakan komponen Pager dari Komponen Arsitektur Android (yang merupakan bagian dari Android Jetpack) dengan Room. Ini membantu kita secara efisien memuat set data besar dari database lokal untuk memungkinkan pengalaman user yang lebih halus sambil menggulir daftar di RecyclerView.

Saya sangat merekomendasikan memeriksa official documentation untuk mempelajari lebih lanjut tentang pustaka Pager di Android.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.