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. Parameterq
adalah satu-satunya bidang yang diwajibkan. - Gunakan bidang
maxResults
danprintType
untuk membatasi hasil ke 10 buku yang cocok yang dicetak. BidangmaxResults
mengambil nilai integer yang membatasi jumlah hasil per kueri. BidangprintType
mengambil satu dari tiga argumen string:all
, yang tidak membatasi hasil menurut tipe sama sekali;books
, yang hanya memberikan hasil buku dalam bentuk cetak; danmagazines
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.
- Dalam bagian Respons, temukan nilai untuk kunci “title”. Perhatikan bahwa hasil ini memiliki nilai dan kunci tunggal.
- Termukan nilai untuk kunci “authors”. Perhatikan bahwa kunci ini berisi larik nilai.
- 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 memerlukanView
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
- 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);
- Menambahkan satu baris kode di bawah panggilan untuk mengeksekusi tugas FetchBook yang mengubah TextView judul untuk menbaca “Loading…” dan menghapus TextView penulis.
- 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);
}