MakalahSerbaAda.Com - Loopj adalah library Android untuk membuat permintaan HTTP asinkron. Saya menyukainya karena kemudahan penggunaan dan kesederhanaannya. Dibuat oleh James Smith, ini juga dikenal sebagai "Klien HTTP Asinkron Android", dan digunakan oleh perusahaan seperti Instagram, Pinterest, dan banyak lainnya. Ini adalah titik masuk yang baik ke dunia library HTTP, dan akan membantu Anda memahami konsep penting dengan sangat mudah.
Untuk belajar menggunakan Library ini, kita akan membuat MovieTrivia, aplikasi sederhana yang terhubung ke layanan web untuk mengambil informasi tentang film atau acara TV dan menampilkan informasi ini kepada pengguna.
1. Setup
Untuk memulai, membuat proyek Android Studio baru, dengan aktivitas kosong. Untuk memasukkan Loopj, salin ketergantungan dari situs web resmi. Anda dapat menemukan ketergantungan di bawah bagian "Instalasi dan penggunaan dasar" di situs web (atau cukup salin string di bawah).
01 compile 'com.loopj.android:android-async-http:1.4.9'
Pesan "Sync Now" akan muncul di sudut kanan atas. Klik sehingga Gradle akan mengunduh library dan membuatnya tersedia untuk proyek Anda.
Karena aplikasi akan terhubung ke internet, kita harus menyatakan izin yang sesuai untuk diotorisasi oleh pengguna. Buka file AndroidManifest.xml Anda dan, tepat sebelum tag application, tulis:
01 <uses-permission android:name="android.permission.INTERNET"/>
Sekarang Anda siap untuk mulai menggunakan Loopj di aplikasi Anda.
2. Implementasi
Kami akan membuat inerface pengguna yang paling sederhana: hanya TextField untuk memasukkan istilah pencarian, Tombol untuk melakukan pencarian, dan TextView untuk menampilkan hasil. Buka activity_mail.xml dan tambahkan komponen UI yang diperlukan seperti yang ditunjukkan di bawah ini.
01 <?xml version="1.0" encoding="utf-8"?> 02 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 03 xmlns:tools="http://schemas.android.com/tools" 04 android:layout_width="match_parent" 05 android:layout_height="match_parent" 06 android:orientation="vertical" 07 android:padding="@dimen/activity_vertical_margin" 08 tools:context="com.pdrogfer.movietrivia.MainActivity"> 09 10 >LinearLayout 11 android:layout_width="match_parent" 12 android:layout_height="wrap_content" 13 android:orientation="horizontal"> 14 15 <EditText 16 android:id="@+id/etSearchTerms" 17 android:layout_width="0dp" 18 android:layout_weight="3" 19 android:layout_height="wrap_content" 20 android:hint="movie or tv show" /> 21 22 <Button 23 android:id="@+id/btnSearch" 24 android:layout_width="0dp" 25 android:layout_weight="1" 26 android:layout_height="wrap_content" 27 android:text="Search" /> 28 29 </LinearLayout> 30 31 <TextView 32 android:id="@+id/tvSearchResults" 33 android:layout_width="match_parent" 34 android:layout_height="wrap_content" 35 android:layout_marginTop="24dp" 36 android:hint="search results"/> 37 </LinearLayout>
Sekarang, seperti biasa, pasang komponen ini di MainActivity.java Anda.
01 public class MainActivity extends AppCompatActivity implements View.OnClickListener {
02
03 EditText etSearchTerms;
04 Button btnSearch;
05 TextView tvSearchResults;
06
07 @Override
08 protected void onCreate(Bundle savedInstanceState) {
09 super.onCreate(savedInstanceState);
10 setContentView(R.layout.activity_main);
11
12 etSearchTerms = (EditText) findViewById(R.id.etSearchTerms);
13 btnSearch = (Button) findViewById(R.id.btnSearch);
14 tvSearchResults = (TextView) findViewById(R.id.tvSearchResults);
15
16 btnSearch.setOnClickListener(this);
17 }
18
19 @Override
20 public void onClick(View v) {
21 String searchTerm = etSearchTerms.getText().toString();
22 etSearchTerms.setText("");
23 // make Loopj HTTP call
24 }
25 }
Untuk menjaga kode Anda tetap bersih dan teratur, buat kelas java terpisah, MyLoopjTask.java, untuk memuat semua kode dan operasi khusus Loopj. Anda akan memerlukan dua variabel instan, satu dari tipe RequestParams untuk membuat detail pencarian ke dalam URL, dan tipe lainnya AsyncHttpClient untuk benar-benar membuat permintaan HTTP. Sebelum melangkah lebih jauh, periksa apakah Android Studio menambahkan impor yang diperlukan ini.
01 import org.json.JSONObject; 02 import cz.msebera.android.httpclient.Header;
Buat juga metode yang menggunakan kueri pengguna sebagai argumen, di sinilah pekerjaan sebenarnya akan dilakukan.
01 public class MyLoopjTask {
02
03 private static final String TAG = "MOVIE_TRIVIA";
04
05 AsyncHttpClient asyncHttpClient;
06 RequestParams requestParams;
07
08 String BASE_URL = "http://www.omdbapi.com/?";
09 String jsonResponse;
10
11 public MyLoopjTask() {
12 asyncHttpClient = new AsyncHttpClient();
13 requestParams = new RequestParams();
14 }
15
16 public void executeLoopjCall(String queryTerm) {
17 requestParams.put("s", queryTerm);
18 asyncHttpClient.get(BASE_URL, requestParams, new JsonHttpResponseHandler() {
19 @Override
20 public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
21 super.onSuccess(statusCode, headers, response);
22 jsonResponse = response.toString();
23 Log.i(TAG, "onSuccess: " + jsonResponse);
24 }
25
26 @Override
27 public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) {
28 super.onFailure(statusCode, headers, throwable, errorResponse);
29 Log.e(TAG, "onFailure: " + errorResponse);
30 }
31 });
32 }
33 }
Seperti yang Anda lihat, Anda dapat menambahkan semua kunci parameter permintaan API yang diperlukan dengan instance RequestParams (dalam hal ini, hanya kueri yang dimasukkan oleh pengguna). Versi metode get() ini mengembalikan objek JSON ke onSuccess, tetapi ada variasi lain yang tersedia untuk memenuhi kebutuhan Anda. (Gunakan Ctrl+O untuk melihat versi lain dari metode ini.)
Ini semua yang perlu Anda lakukan untuk mengimplementasikan klien Loopj untuk membuat panggilan HTTP ke layanan web. Dalam kasus kami, kami ingin mengirim permintaan kami ketika pengguna mengklik tombol "Cari". Jadi, kembali ke MainActivity, buat instance MyLoopjTask dan di dalam onClick panggil executeLoopjCall dengan istilah yang dimasukkan oleh pengguna. MainActivity akan terlihat seperti berikut.
01 public class MainActivity extends AppCompatActivity implements View.OnClickListener {
02
03 EditText etSearchTerms;
04 Button btnSearch;
05 TextView tvSearchResults;
06 MyLoopjTask myLoopjTask;
07
08 @Override
09 protected void onCreate(Bundle savedInstanceState) {
10 super.onCreate(savedInstanceState);
11 setContentView(R.layout.activity_main);
12
13 etSearchTerms = (EditText) findViewById(R.id.etSearchTerms);
14 btnSearch = (Button) findViewById(R.id.btnSearch);
15 tvSearchResults = (TextView) findViewById(R.id.tvSearchResults);
16
17 btnSearch.setOnClickListener(this);
18
19 myLoopjTask = new MyLoopjTask();
20 }
21
22 @Override
23 public void onClick(View v) {
24 String searchTerm = etSearchTerms.getText().toString();
25 etSearchTerms.setText("");
26 // make loopj http call
27 myLoopjTask.executeLoopjCall(searchTerm);
28 }
29 }
Sekarang, jika Anda menjalankan aplikasi, Anda akan melihat hasil permintaan Anda di jendela log.
3. Publikasikan Hasil ke UI
Memisahkan operasi asinkron ke dalam kelas khusus membantu menjaga kode kita tetap bersih, tetapi itu berarti kita tidak memiliki akses ke elemen UI secara langsung. Untuk menampilkan hasil permintaan ini, saya sarankan untuk membuat user interface. Ini adalah strategi umum, yang dibahas misalnya anda menambahkan pertanyaan dalam Stack Overflow. Ini memiliki tiga langkah mudah.
Buat Interface
Pertama, buat interface dengan metode tunggal yang akan dipanggil ketika hasil permintaan HTTP diperoleh dari Loopj.
01 public interface OnLoopjCompleted {
02 public void taskCompleted(String results);
03 }
Perbarui Asynchronous Task Handler
Di MyLoopjTask, ubah konstruktor sehingga dibutuhkan Context dan instance OnLoopjCompleted sebagai parameter.
01 public MyLoopjTask(Context context, OnLoopjCompleted listener) {
02 asyncHttpClient = new AsyncHttpClient();
03 requestParams = new RequestParams();
04 this.context = context;
05 this.loopjListener = listener;
06 }
Sekarang, ketika hasil permintaan tersedia di MyLoopjTask, teruskan ke metode user interface.
01 @Override
02 public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
03 super.onSuccess(statusCode, headers, response);
04 jsonResponse = response.toString();
05 loopjListener.taskCompleted(jsonResponse);
06 Log.i(TAG, "onSuccess: " + jsonResponse);
07 }
Update Activity
Terakhir, buat aktivitas yang ingin Anda perbarui dalam hal ini MainActivity implementasikan OnLoopjCompleted. Perbarui inisialisasi myLoopjTask ke myLoopjTask = new MyLoopjTask(this, this);.
Karena aktivitas Anda sekarang mengimplementasikan OnLoopjCompleted, Android Studio akan memaksa Anda untuk mengimplementasikan metode taskCompleted. Di sana, Anda dapat memperbarui UI dengan data baru.
01 @Override
02 public void taskCompleted(String results) {
03 tvSearchResults.setText(results);
04 }
4. Kesimpulan
Di sana Anda memilikinya. Saat Anda menjalankan aplikasi, semua data dari permintaan HTTP asinkron Anda akan ditampilkan kepada pengguna. Secara alami, Anda ingin mengurai data JSON yang diterima untuk mengekstrak hanya bagian yang Anda butuhkan. Misalnya, Anda dapat menampilkan poster film dengan meneruskan URL gambar poster ke Picasso.
Dalam tutorial ini, Anda telah melihat cara menggunakan Loopj, pada sebuah library untuk melakukan permintaan HTTP asinkron di Android. Loopj mudah digunakan hanya dengan beberapa baris kode. Sekarang Anda tidak punya alasan untuk tidak memperbarui aplikasi Anda dengan konten dari layanan web favorit Anda!