Asynchronous Load Contact Menggunakan Load Manager

Sebuah Aplikasi android yang dikembangkan ada kalanya memerlukan load data dalam jumlah besar.

Load Data dapat dilakukan secara syncronous dan asynchronous.

Pada tutorial ini kita akan melakukan Load data kontak secara asynchronous menggunakan loader manager.

Loader manager android merupakan fitur yang ditambahkan saat peluncuran rilis android 3.0 (Api Level 11) yang mendukung load data secara asynchronous.

Proses Load data secara asynchronous memiliki keunggulan dalam kecepatan load data.

Load data asynchronous dapat menjalankan proses saat proses lain sedang berlangsung.artinya jika kita mengunakan recycleview yang menampilkan data secara scrollable maka perubahan data dapat tampil ketika proses scroll ke atas atau ke bawah.

Membuat Loader untuk menampilkan data Contact Android Studio

  1. Bukalah New Project Pada Android Studio dan Beri Nama Project Loader Android dan Klik Next .

2. Pilih Target Android Device seperti gambar di bawah ini dan klik next

Target Android Devices Project Loader Android

3. Pilih Empty Activity dan klik Next

4. Pada Bagian Configure Activity Isikan data Activity Name MainActivity dan layout Name activity_main seperti gambar berikut

4. Config manifest dan tambahkan data permission untuk read contact

tambahkan sebelum tag <application

<uses-permission android:name="android.permission.READ_CONTACTS" />

5.Untuk membuat activity yang memiliki loader maka method yang harus ada adalah OnCreateLoader() → onLoadFinished() → onLoadReset().

MainActivity.java

package  com.loaderandroid;
import android.Manifest;
import android.content.CursorLoader;
import android.content.Loader;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v4.widget.SimpleCursorAdapter;
import android.support.v7.app.AppCompatActivity;
import android.widget.ListView;


public class MainActivity extends AppCompatActivity implements android.app.LoaderManager.LoaderCallbacks<Cursor> {


    private static final String[] PROJECTION = {ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME};
    private String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + "COLLATE LOCALIZED ASC"; // Set Order Ascending
    SimpleCursorAdapter adapter;
    String[] from = {ContactsContract.Contacts.DISPLAY_NAME};
    int[] to = {android.R.id.text1};


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, null, from, to, 0);
        ListView listView = (ListView) findViewById(R.id.listView);
        listView.setAdapter(adapter);

        if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CONTACTS}, 1);
        } else {
            getLoaderManager().initLoader(0, null,this);
        }
    }

    @Override
    public Loader<Cursor> onCreateLoader(int id, Bundle bundle) {
        if (id == 0 ) {
            return new CursorLoader(this, ContactsContract.Contacts.CONTENT_URI, PROJECTION, null, null, sortOrder);
        } else {
            return null;
        }
    }

    @Override
    public void onLoadFinished(android.content.Loader<Cursor> loader, Cursor data) {
        adapter.swapCursor(data);
        adapter.notifyDataSetChanged();
    }

    @Override
    public void onLoaderReset(android.content.Loader<Cursor> loader) {
        adapter.swapCursor(null);
    }
}

Untuk menggunakan loader android, class yang dibuat harus memiliki implentasi loader manager

implements android.app.LoaderManager.LoaderCallbacks<Cursor> 

Loader digunakan dengan menggunakan perintah onCreateLoader yang melakukan return LoaderManager.

Data Contact ditampilkan menggunkan adapter CursorAdapter dan menggunakan Listview.

adapter cursoradapter berisi android.R.layout.simple_list_item_1 yang akan menampilkan data nama.

Untuk xml yang digunakan adalah sebagai berikut:

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/listView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.loaderandroid.MainActivity" />

Listview menampilkan list data contact yang terdapat pada contact emulator.

Output Program

output contact menggunakan loader
Output Loader

Salah satu manfaat yang diberikan ketika menggunakan android loader adalah disediakannya asynchronous loading yang bekerja di background aplikasi.

Semakin banyak dan besar data yang akan ditampilkan maka akan berdampak terhadap kecepatan aplikasi. Untuk menghindari penurunan kecepatan aplikasi dalam menampilkan data dalam jumlah yang besar dapat menggunakan loader manager android studio.

Leave a comment