• Uncategorized
  • 0

Koneksi ke Internet dengan AsyncTask dan AsyncTaskLoader

Dalam praktik ini kita akan menggunakan AsyncTask untuk memulai tugas latar belakang yang mendapatkan data dari internet menggunakan REST API sederhana. Kita akan menggunakan Google API Explorer untuk belajar cara menanyakan Book Search API, mengimplementasikan kueri ini dalam thread worker menggunakan AsyncTask, dan menampilkan hasilnya dalam UI. Lalu kita akan mengimplementasikan ulang tugas latar belakang yang sama menggunakan AsyncTaskLoader, yang akan lebih efisien dalam memperbarui UI, menangani masalah kinerja, dan meningkatkan keseluruhan UX.

kita akan membangun aplikasi yang berisi bidang EditText dan Tombol. Pengguna memasukkan nama buku dalam EditText dan mengeklik tombol. Tombol mengeksekusi AsyncTask yang menanyakan API Penelusuran Google Book untuk menemukan penulis dan judul buku yang dicari pengguna. Hasilnya diambil dan ditampilkan dalam bidang TextView di bawah tombol.

Dalam praktik ini kita akan menggunakan API Google Books untuk mencari informasi tentang buku, seperti penulis dan judulnya. API Google Books menyediakan akses pemrograman ke layanan Penelusuran Google Book menggunakan REST API. Ini adalah layanan yang sama yang digunakan di belakang layar saat kita mengeksekusi penelusuran secara manual di Google Books. kita bisa menggunakan Google API Explorer dan Penelusuran Google Book pada browser untuk memverifikasi bahwa aplikasi Android kita mendapatkan hasil yang diharapkan.

  1. Buat proyek aplikasi bernama Who Wrote it? dengan satu aktivitas, menggunakan Template Empty Activity.
  2. Tambahkan elemen UI berikut di dalam file XML, menggunakan LinearLayout vertikal sebagai tampilan root—tampilan yang berisi semua tampilan lain di dalam file XML layout. Pastikan LinearLayout menggunakan android:orientation="vertical":

Dalam file strings.xml, tambahkan sumber daya string berikut ini:

  1. Buat kelas Java baru bernama FetchBook dalam aplikasi/java yang diperluas AsyncTask. AsyncTask memerlukan tiga argumen:

    • Parameter masukan.
    • Indikator kemajuan.
    • Jenis hasil.

    Parameter tipe generik untuk tugas adalah <String, Void, String>since the AsyncTask takes a String as the first parameter (the query), Void since there is no progress update, and Stringkarena parameter ini mengembalikan string sebagai hasilnya (respons JSON).

  2. Implementasikan metode yang diperlukan, doInBackground(), dengan meletakkan kursor pada teks yang digarisbawahi merah, menekan Alt + Enter (Opt + Enter di Mac) dan memiilih Implement methods. Pilih doInBackground() dan klik OK. Pastikan parameternya dan kembalikan tipe yang jenisnya benar (Ini memerlukan larik String dan mengembalikan String).
    1. Klik menu Code dan pilih Override methods (atau tekan Ctrl + O). Pilih metodeonPostExecute(). Metode onPostExecute() mengambil String sebagai parameter dan mengembalikan void.
  3. Untuk menampilkan hasil dalam TextView, kita harus memiliki akses ke TextView yang ada di dalam AsyncTask. Buat variabel anggota dalam FetchBook AsyncTask untuk dua TextView yang menunjukkan hasilnya, dan inisialisasi keduanya dalam konstruktor. kita akan menggunakan konstruktor ini dalam MainActivity untuk meneruskan TextView ke AsyncTask.

Class FectBook akan seperti berikut:

Pada method onPostExecute tadi isikan kode berikut:

 

Pada MainActivity, implementasikan kode berikut pada method onClick searchbook

 

Pada method doInBackground, implementasikan kode berikut:

 

Saat menggunakan AsyncTask, AsyncTask tidak bisa memperbarui UI jika perubahan konfigurasi terjadi saat tugas latar belakang sedang berjalan. Untuk mengatasi situasi ini, Android SDK menyediakan serangkaian kelas bernama loader yang didesain secara spesifik untuk memuat data ke dalam UI secara asinkron. Jika kita menggunakan loader, kita tidak perlu khawatir loader akan kehilangan kemampuannya untuk memperbarui UI dalam aktivitas yang awalnya membuatnya.

Loader menyediakan banyak fungsionalitas tambahan, bukan hanya untuk menjalankan tugas dan menghubungkan kembali ke Aktivitas. Misalnya, kita bisa melampirkan loader ke sumber data dan membuatnya secara otomatis memperbarui elemen UI saat data dasarnya berubah. Loader juga bisa diprogram untuk melanjutkan memuat jika terganggu.

Prinsipnya, gunakan AsyncTaskLoader sebagai ganti AsyncTask jika pengguna mungkin akan memutar layar saat pekerjaan sedang berlangsung, atau jika UI perlu diperbarui saat pekerjaan selesai.

Dalam latihan ini kita akan mempelajari cara menggunakan AsyncTaskLoader sebagai ganti AsyncTask untuk menjalankan kueri API Books. kita akan mempelajari selengkapnya tentang penggunaan loader yang lain pada pelajaran berikutnya.

Mengimplementasikan Loader memerlukan komponen berikut:

  • Kelas yang memperluas kelas Loader (dalam kasus ini, AsyncTaskLoader).
  • Aktivitas yang mengimplementasikan kelas LoaderManager.LoaderCallbacks.
  • Instance LoaderManager.

Kemudian kita akan membuat Project baru bernama WhoWroteItLoader

Pada project loadernya, mainActivity implementasikan pada method onLoadFinished

 

Buat class baru bernama NetworkUtils, implementasikan attribute berikut:

 

private static final String BOOK_BASE_URL =  "https://www.googleapis.com/books/v1/volumes?";
private static final String QUERY_PARAM = "q"; // Parameter for the search string.
private static final String MAX_RESULTS = "maxResults"; // Parameter that limits search results.
private static final String PRINT_TYPE = "printType"; // Parameter to filter by print type.

asdasd

Kemudian buat method  getBookInfo(String queryString) dan masukkan kode berikut:

 

Jalankan aplikasi:

 

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *