Android asynctask merupakan menjalankan proses di background pada android. Terutama ketika request http client. Android sudah memiliki class asynctask tersendiri, namun tidak menjadi satu dengan request http client, karena untuk melakukan request http client harus berjalan di background. android-async-http merupakan library yang memudahkan proses asynctask sekaligus request http client.
android-async-http
android-async-http dikembangkan diatas library httpclient apache. Sejumlah fitur http client sudah include didalamnya, sehingga memudahkan ketika melakukan request.Fitur tersebut seperti onStart(), onSuccess(), onFailure(), onRetry(). Selain itu berikut sejumlah fitur yang dimiliki Loopj :
- Menggunakan HttpClient versi 4.3.6, dibandingkan menggunakan DefaultHttpClient bawaan android Using upstream HttpClient of version 4.3.6 instead of Android provided DefaultHttpClient
- Kompatibel dengan Android API 23 ke atas
- Melakukan request HTTP secara Make asynchronous dan menangani respon secara anonymous callbacks
- HTTP request yang dilakukan di belakang thread UI
- Disertai builder untuk request GET/POST
- Dapat melakukan request upload tanpa library tambahan
- Streamed JSON uploads with no additional libraries
- Handling circular and relative redirects
- Ukuran library kecil, hanya 90kb
- Bisa melakukan otomatis request berulang untuk optimasi koneksi mobile
- Komunikasi protokol binari dengan
1BinaryHttpResponseHandler
- Built-in parsing respon ke JSON dengan
1JsonHttpResponseHandler
- Menyimpan respon ke file dengan
1FileAsyncHttpResponseHandler
- Integrasi dengan Jackson JSON, Gson atau library JSON lainnya dengan
1BaseJsonHttpResponseHandler
- Mendukung parser SAX dengan
1SaxAsyncHttpResponseHandler
- Mendukung bahasa dan content encodings, bukan hanya UTF-8
Instalasi
Tambahkan library pada build.gradle seperti :
1 2 3 | dependencies { compile 'com.loopj.android:android-async-http:1.4.9' } |
Implementasi
Cukup dengan membuat object AsyncHttpClient, dan sudah termasuk fungsi request didalamnya.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | AsyncHttpClient client = new AsyncHttpClient(); client.get("https://www.google.com", new AsyncHttpResponseHandler() { @Override public void onStart() { // called before request is started } @Override public void onSuccess(int statusCode, Header[] headers, byte[] response) { // called when response HTTP status is "200 OK" } @Override public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) { // called when response HTTP status is "4XX" (eg. 401, 403, 404) } @Override public void onRetry(int retryNo) { // called when request is retried } }); |
Untuk menangkap respon string ketika sukses, maka pada method onSuccess() ditambahkan seperti :
String str = new String(responseBody, “UTF-8”);
Melakukan Request POST
untuk melakukan request post dengan menggunakan tambahan class RequestParam, seperti :
1 | RequestParams params = new RequestParams("single", "value"); |
atau
1 2 3 | RequestParams params = new RequestParams(); params.put("key", "value"); params.put("more", "data"); |
lalu pada AsyncHttpClient
1 | client.post(restApiUrl, params, responseHandler); |
Menggunakan Basic Auth
Juga bisa mengimplementasikan request yang memerlukan basic auth, seperti :
1 2 3 | AsyncHttpClient client = new AsyncHttpClient(); client.setBasicAuth("username","password/token"); client.get("https://example.com"); |
untuk tahu lebih banyak bisa baca di http://loopj.com/android-async-http/ atau https://github.com/loopj/android-async-http