7.2: Menghubungkan ke Internet dengan AsyncTask dan AsyncTaskLoader

Tugas 1. Menjelajahi Books API

  • Buka Google APIs Explorer
  • Klik Books API
  • Klik books.volumes.list
  • Isikan field berikut
  • Dalam bidang q masukkan nama buku, atau sebagain nama buku. Parameter q adalah satu-satunya bidang yang diwajibkan.
  • Gunakan bidang maxResults dan printType untuk membatasi hasil ke 10 buku yang cocok yang dicetak. Bidang maxResults mengambil nilai integer yang membatasi jumlah hasil per kueri. Bidang printType mengambil satu dari tiga argumen string: all, yang tidak membatasi hasil menurut tipe sama sekali; books, yang hanya memberikan hasil buku dalam bentuk cetak; dan magazines yang memberikan hasil majalah saja.
  • Pastikan switch “Authorize requests using OAuth 2.0” di bagian atas formulir dinonaktifkan. Klik Execute without OAuth di bagian bawah formulir.
  • Gulir ke bawah untuk melihat Permintaan dan Respons.

  • 1.2 Menganalisis Respons API Books

    Di bagian bawah laman Anda bisa melihat Respons terhadap kueri. Respons menggunakan formatJSON, yang merupakan format umum untuk respons kueri API. Dalam laman web API Explorer, kode JSON diformat dengan baik agar dapat dibaca oleh manusia. Dalam aplikasi Anda, repons JSON akan dikembalikan dari layanan API sebagai string tunggal, dan Anda perlu melakukan parsing pada string tersebut untuk mengesktrak informasi yang diperlukan.

    1. Dalam bagian Respons, temukan nilai untuk kunci “title”. Perhatikan bahwa hasil ini memiliki nilai dan kunci tunggal.
    2. Termukan nilai untuk kunci “authors”. Perhatikan bahwa kunci ini berisi larik nilai.
    3. Dalam praktik ini Anda hanya akan mengembalikan judul dan penulis item pertama.

Tugas 2: Membuat “Who Wrote it?” Aplikasi

  • Buat project baru bernama Who Wrote it
  • Ubah layout menjadi LinearLayout dan tambahkan elemen UI berikut dalam file xml
  • Dalam file strings.xml, tambahkan sumber daya string berikut ini:
    <string name="instructions">Enter a book name, or part of a
    book name, or just some text from a book to find
    the full book title and who wrote the book!</string>
    <string name="button_text">Search Books</string>
    <string name="input_hint">Enter a Book Title</string>
    
  • Buat metode bernama searchBooks() dalam MainActivity.java untuk menangani tindakan tombol onClick. Seperti pada semua metode onClick, yang satu ini memerlukan View sebagai parameter.
  • Dalam MainActivity tambahkan variabel EditText, TextView penulis dan TextView judul
  • Inisialisasi variabel ini dalam onCreate()
  • Dalam method searchBooks() get EditText dan konversikan ke dalam string

  • Buat kelas bernama FetchBook
  • Implementasi method doInBackground()
  • Buat kelas bernama NetworkUtils
  • Buat variabel Log_tag

  • Buat method getBookInfo untuk mengambil nilai string
  • Buat dua variabel dalam getBookInfo() untuk menyambugkan dan membaca data yang datang
  • Buat variabel dalam getBookInfo() untuk memasukkan respon dari query dan mengembalikannya
  • Buat konstanta berikut dalam NetworkUtils
  • Buat block try, catch dan finally dalam getBookInfo()

  • Bangun URI dalam block try
  • Konversi URI ke URL
  • Buat koneksi URL dan buat permintaan

  • Baca respon menggunakan InputStream dan StringBuffer lalu konversikan ke string

  • Tutup block try dan log dalam block catch

  • Tutup kedua urlConnection dan variabel pembaca dalam block finally
  • Log nilai variabel bookJSONString sebelum mengebalikannya
  • Dalam method AsyncTask doInBackground() panggil method getBookInfo()
  • Tambahkan code berikut dalam method searchBooks()
  • Jalankan aplikasi
  • Buka AndroidManifest.xml
  • Tambahkan tag berikut untuk memberi izin internet

  • Dalam onPostExecute() tambahkan block try dan catch
  • Gunakan kelas JSON Java bawaan untuk mendapatkan larik JSON

  • Iterasi melalui itemsArray

  • Jika tidak ada hasil yang memenuhi kriteria, setel TextView No Result Found dan hapus TextView authors
  • Dalam block catch cetak log

Tugas 3. Mengimplementasikan praktik terbaik UI

3.1 Menyembunyikan Keyboard dan Memperbarui TextView

  1. Menambahkan kode berikut ke metode searchBooks() untuk menyembunyikan keyboard saat tombol ditekan:
    InputMethodManager inputManager = (InputMethodManager)
                         getSystemService(Context.INPUT_METHOD_SERVICE);
    inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),
                         InputMethodManager.HIDE_NOT_ALWAYS);
    
  2. Menambahkan satu baris kode di bawah panggilan untuk mengeksekusi tugas FetchBook yang mengubah TextView judul untuk menbaca “Loading…” dan menghapus TextView penulis.
  3. Mengekstrak sumber daya String.

Tugas 4. Migrasi ke AsyncTaskLoader

  • Salin project WhoWroteIt dan ganti nama menjadi WhoWroteItLoade
  • Buat kelas baru bernama BookLoader
  • Implementasikan method laodInBackground()
    • Buat variabel mQueryString
    • Dalam method loadInBackground dan panggil method getBookInfo()

Loader tidak akan mulai memuat data sampai dipanggil method forceLoad()

Tambahkan implementasi LoaderManager.LoaderCallback ke deklarasi kelas MainActivity

 

Implementasi method onCreateLoader(), onLoadFinished() dan onLoaderReset()

Dalam method searchBooks() panggil restartLoader()

 

Dalam onCreateLoader() kembalikan instance kelas BookLoader
Perbarui onLoadFinished

Tambahkan kode berikut di onCreate() untuk menghubungkan ulang ke Loader jika sudah ada:

if(getSupportLoaderManager().getLoader(0)!=null){
   getSupportLoaderManager().initLoader(0,null,this);
}
Catatan: Jika loader ada, inisialisasikan loader. Anda hanya perlu mengaitkan kembali loader ke Aktivitas jika kueri sudah dieksekusi. Dalam status awal aplikasi, data tidak dimuat sehingga tidak ada yang perlu dipertahankan.
  1. Jalankan aplikasi lagi dan putar perangkat. LoaderManager sekarang mempertahankan data di semua konfigurasi perangkat!

  2. Hapus kelas FetchBook karena sudah tidak digunakan lagi.

Leave a Reply

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