Belajar CRUD Room Database di Android : Membuat Fungsi Read Data

Hi semuanya, setelah sebelumnya kita belajar bagamana cara melakukan operasi insert/create data pada Room Database di Android. Kali ini kita belajar tentang bagaimana melakukan operasi read atau membaca data yang sudah kita insert-kan ke database menggunakan Room library untuk Android.

Bagi yang belum tahu apa itu Room, Room adalah sebuah database library yang memudahkan kita dalam me-manage dan melakukan operasi-operasi CRUD, query dan sebagainya pada database SQLite di Android. Kalian bisa baca tutorial sebelumnya tentang cara meng-import Room database library ke dalam project aplikasi di Android Studio kalian.

karena tutorial ini berhubungan dengan tutorial-tutorial tentang Room database sebelumnya, saya sangat sarankan kalian untuk membaca terlebih dahulu tutorial-tutorial berikut sebelum melanjutkan.

Pre-Requisites :

  1. Membuat Project Baru di Android Studio
  2. Mengimport Room Library di Android Studio
  3. Membuat Entity, DAO, Database menggunakan Room library
  4. Melakukan Create / Insert Data menggunakan Room database library
  5. (Optional)Tutorial Lengkap SQLite

Membuat Fitur Read All Data Menggunakan Room Database Library

Membuat XML layout

Untuk membuat fitur read all data menggunakan Room library, yang kalian butuhkan adalah sebuah Activity baru yang berisi RecyclerView untuk menampilkan semua data yang ada di dalam SQLite database. File XML untuk Activity read all ini bisa dilihat di sini. Untuk item RecyclerView nya, kita hanya akan menampilkan nama barang, file XML layout untuk item Recycler View bisa dilihat di sini.

Membuat method read all di Data Access Object

Setelah kalian menambahkan dua file XML layout tersebut ke project Android Studio kalian, selanjutnya kita akan menambahkan method untuk read all data pada BarangDAO.java. Pada interface Data Access Object inilah kita akan menambahkan method-method yang digunakan untuk mengakses database secara langsung, termasuk method read all data.

Copy-pastekan kode di bawah ini ke file BarangDAO.java :

package co.twoh.roomtutorial.data;

import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Insert;
import android.arch.persistence.room.Query;

import co.twoh.roomtutorial.model.Barang;

/**
 * Created by Herdi_WORK on 21.01.18.
 */

@Dao
public interface BarangDAO {

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    long insertBarang(Barang barang);

    @Query("SELECT * FROM tbarang")
    Barang[] selectAllBarangs();
}

Bisa dilihat pada codingan di atas, kita menggunakan annotation @Query untuk melakukan read all data. Berbeda dengan annotation @Insert yang kita gunakan untuk add/tambah data. Pada annotation @Query kita bisa memasukkan query SQLite yang kita inginkan di situ. Karena method nya digunakan untuk mengambil semua data barang, maka kita tulis saja query SQL select all standard. Ini adalah salah satu kemudahan yang ditawarkan oleh Room database library. 🙂

Membuat RecyclerView Adapter

Kemudian, kita akan membuat RecyclerView adapter supaya data yang kita ambil dari database bisa dimapping dan ditampilkan pada aplikasi. Untuk source code RecyclerView adapternya bisa kalian lihat di sini.

Membuat Activity Read All Data

Jika sudah, maka terakhir kita akan membuat activity read all data, dimana pada activity inilah kita akan mengakses Data Access Object (BarangDAO), mengambil semua data barang, dan setelah itu ditampilkan pada aplikasi.

Isi kode RoomReadActivity.java seperti di bawah :

package co.twoh.roomtutorial;

import android.app.Activity;
import android.arch.persistence.room.Room;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;

import java.util.ArrayList;
import java.util.Arrays;

import co.twoh.roomtutorial.adapter.AdapterBarangRecyclerView;
import co.twoh.roomtutorial.data.factory.AppDatabase;
import co.twoh.roomtutorial.model.Barang;

/**
 * Created by Herdi_WORK on 21.01.18.
 */

public class RoomReadActivity extends AppCompatActivity {

    private AppDatabase db;
    private RecyclerView rvView;
    private RecyclerView.Adapter adapter;
    private RecyclerView.LayoutManager layoutManager;
    private ArrayList<Barang> daftarBarang;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {

        /**
         * Initialize layout dan sebagainya
         */
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_read);

        /**
         * Initialize ArrayList untuk data barang
         */
        daftarBarang = new ArrayList<>();

        /**
         * Initialize database
         * allow main thread queries
         */
        db = Room.databaseBuilder(getApplicationContext(),
                AppDatabase.class, "barangdb").allowMainThreadQueries().build();

        /**
         * Initialize recyclerview dan layout manager
         */
        rvView = findViewById(R.id.rv_main);
        rvView.setHasFixedSize(true);
        layoutManager = new LinearLayoutManager(this);
        rvView.setLayoutManager(layoutManager);

        /**
         * Add all data to arraylist
         */
        daftarBarang.addAll(Arrays.asList(db.barangDAO().selectAllBarangs()));

        /**
         * Set all data ke adapter, dan menampilkannya
         */
        adapter = new AdapterBarangRecyclerView(daftarBarang, this);
        rvView.setAdapter(adapter);
    }

    public static Intent getActIntent(Activity activity) {
        // kode untuk pengambilan Intent
        return new Intent(activity, RoomReadActivity.class);
    }
}

Dari codingan di atas, codingan yang penting adalah seperti di bawah ini :

        private AppDatabase db;

        /**
         * Initialize database
         * allow main thread queries
         */
        db = Room.databaseBuilder(getApplicationContext(),
                AppDatabase.class, "barangdb").allowMainThreadQueries().build();


        /**
         * Add all data to arraylist
         */
        daftarBarang.addAll(Arrays.asList(db.barangDAO().selectAllBarangs()));

 

Pada source code di atas bisa kita lihat bagaimana cara mengakses BarangDAO, yang sebenarnya sama caranya dengan di tutorial insert data sebelumnya. Perlu diketahui di sini kita menggunakan method allowMainThreadQueries() supaya kita bisa menjalankan method read all data di main thread. Namun cara ini tidak disarankan, karena kita sebenarnya harus menjalankannya di background thread menggunakan AsyncTask seperti di tutorial sebelumnya.

Itu saja yang perlu ditambahkan, mudah bukan? 🙂 Sekarang mari kita coba demokan aplikasinya.

Demo

Untuk demonya, kalian bisa coba jalankan aplikasinya, dan inputkan beberapa data ke database. Setelah itu untuk activity Read All Data tampilannya akan menjadi seperti di bawah ini :

Tampilan interface read all data Room Database

Tampilan interface read all data Room Database

Thats all, kita sudah berhasil melakukan step kedua (Read) pada series tutorial CRUD menggunakan Room database library.

Untuk cara mengupdate data yang sudah kita inputkan pada aplikasi menggunakan Room Database library ini akan saya bahas di tutorial selanjutnya.

Semoga berguna, untuk source code lengkap nya, kalian bisa download di GitHub saya. Jangan lupa untuk follow dan star juga ya. 😀

Jangan sungkan untuk bertanya apabila ada yang kurang mengerti, silahkan tulis lewat komentar di bawah. 😉





Download aplikasi kami di Google Play Store


Tutorial Menarik Lainnya :

Leave a Reply