Mengirim permintaan sederhana

Pada level tinggi, Anda menggunakan Volley dengan membuat RequestQueue dan mengirimkannya objek Request. RequestQueue mengelola thread pekerja untuk menjalankan operasi jaringan, membaca dari dan menulis ke cache, serta mengurai respons. Permintaan akan melakukan penguraian respons mentah dan Volley akan menangani pengiriman respons yang diurai kembali ke thread utama untuk dikirimkan.

Tutorial ini menjelaskan cara mengirim permintaan menggunakan metode praktis Volley.newRequestQueue yang akan menyiapkan RequestQueue untuk Anda. Lihat tutorial selanjutnya, Menyiapkan RequestQueue, untuk informasi tentang cara menyiapkan RequestQueue sendiri.

Tutorial ini juga menjelaskan cara menambahkan permintaan ke RequestQueue dan membatalkan permintaan.

Menambahkan izin INTERNET

Untuk menggunakan Volley, Anda harus menambahkan izin android.permission.INTERNET pada manifes aplikasi Anda. Tanpanya, aplikasi Anda tidak akan bisa terhubung ke jaringan.

Menggunakan newRequestQueue

Volley menyediakan metode praktis Volley.newRequestQueue yang akan menyiapkan RequestQueue untuk Anda, menggunakan nilai default, dan memulai antrean. Contoh:

Kotlin

    val textView = findViewById<TextView>(R.id.text)
    // ...

    // Instantiate the RequestQueue.
    val queue = Volley.newRequestQueue(this)
    val url = "http://www.google.com"

    // Request a string response from the provided URL.
    val stringRequest = StringRequest(Request.Method.GET, url,
            Response.Listener<String> { response ->
                // Display the first 500 characters of the response string.
                textView.text = "Response is: ${response.substring(0, 500)}"
            },
            Response.ErrorListener { textView.text = "That didn't work!" })

    // Add the request to the RequestQueue.
    queue.add(stringRequest)
    

Java

    final TextView textView = (TextView) findViewById(R.id.text);
    // ...

    // Instantiate the RequestQueue.
    RequestQueue queue = Volley.newRequestQueue(this);
    String url ="http://www.google.com";

    // Request a string response from the provided URL.
    StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
                new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            // Display the first 500 characters of the response string.
            textView.setText("Response is: "+ response.substring(0,500));
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            textView.setText("That didn't work!");
        }
    });

    // Add the request to the RequestQueue.
    queue.add(stringRequest);
    

Volley selalu memberikan respons yang diurai pada thread utama. Berjalan di thread utama adalah hal yang praktis untuk mengisi kontrol UI dengan data yang diterima, sebab Anda bisa bebas memodifikasi kontrol UI langsung dari pengendali respons. Namun hal tersebut sangat penting bagi banyak semantik penting yang disediakan oleh library, terutama yang berkaitan dengan pembatalan permintaan.

Lihat Menyiapkan RequestQueue untuk deskripsi tentang cara menyiapkan RequestQueue sendiri, bukan menggunakan metode praktis Volley.newRequestQueue.

Mengirim permintaan

Untuk mengirim permintaan, Anda cukup membuat satu dan menambahkannya ke RequestQueue dengan add(), seperti yang ditunjukkan di atas. Setelah ditambahkan, permintaan akan bergerak melalui pipeline, dilayani, dan respons mentahnya diuraikan dan dikirim.

Saat Anda memanggil add(), Volley akan menjalankan satu thread pemrosesan cache dan kumpulan thread pengiriman jaringan. Saat Anda menambahkan permintaan ke antrean, permintaan akan diambil oleh thread cache dan diprioritaskan: jika permintaan dapat dilayani dari cache, respons yang di-cache akan diuraikan pada thread cache dan respons yang diuraikan akan dikirimkan di thread utama. Jika permintaan tidak dapat dilayani dari cache, permintaan akan ditempatkan di antrean jaringan. Thread jaringan pertama yang tersedia akan mengambil permintaan dari antrean, melakukan transaksi HTTP, menguraikan respons pada thread pekerja, menulis respons ke cache, dan memposting respons yang diurai kembali ke thread utama untuk dikirimkan.

Perhatikan bahwa operasi mahal seperti pemblokiran I/O dan penguraian/dekode dilakukan pada thread pekerja. Anda bisa menambahkan permintaan dari thread mana pun, tetapi respons akan selalu dikirimkan di thread utama.

Gambar 1 menggambarkan proses permintaan:

kolom sistem

Gambar 1. Proses permintaan.

Membatalkan permintaan

Untuk membatalkan permintaan, panggil cancel() pada objek Request Anda. Setelah dibatalkan, Volley menjamin agar pengendali respons Anda tidak akan pernah dipanggil. Dalam praktiknya ini berarti Anda bisa membatalkan semua permintaan yang tertunda dalam metode onStop() aktivitas dan Anda tidak perlu membuang pengendali respons dengan centang untuk getActivity() == null, apakah onSaveInstanceState() sudah dipanggil, atau boilerplate defensif lainnya.

Untuk memanfaatkan perilaku ini, Anda biasanya harus melacak semua permintaan yang sedang berlangsung agar dapat membatalkannya di waktu yang tepat. Ada cara yang lebih mudah: Anda dapat mengaitkan objek tag dengan setiap permintaan. Anda kemudian bisa menggunakan tag ini untuk memberikan cakupan permintaan untuk dibatalkan. Misalnya, Anda bisa menandai semua permintaan dengan Activity yang sedang dibuat atas namanya, dan memanggil requestQueue.cancelAll(this) dari onStop(). Demikian pula, Anda bisa menandai semua permintaan gambar thumbnail di tab ViewPager dengan masing-masing tab dan membatalkan dengan geser untuk memastikan bahwa tab baru tidak ditunda oleh permintaan dari yang lain.

Berikut adalah contoh yang menggunakan nilai string untuk tag:

  1. Tentukan tag dan tambahkan ke permintaan Anda.

    Kotlin

        val TAG = "MyTag"
        val stringRequest: StringRequest // Assume this exists.
        val requestQueue: RequestQueue? // Assume this exists.
    
        // Set the tag on the request.
        stringRequest.tag = TAG
    
        // Add the request to the RequestQueue.
        requestQueue?.add(stringRequest)
        

    Java

        public static final String TAG = "MyTag";
        StringRequest stringRequest; // Assume this exists.
        RequestQueue requestQueue;  // Assume this exists.
    
        // Set the tag on the request.
        stringRequest.setTag(TAG);
    
        // Add the request to the RequestQueue.
        requestQueue.add(stringRequest);
        
  2. Dalam metode onStop() aktivitas Anda, batalkan semua permintaan yang memiliki tag ini.

    Kotlin

        protected fun onStop() {
            super.onStop()
            requestQueue?.cancelAll(TAG)
        }
        

    Java

        @Override
        protected void onStop () {
            super.onStop();
            if (requestQueue != null) {
                requestQueue.cancelAll(TAG);
            }
        }
        

    Berhati-hatilah saat membatalkan permintaan. Jika Anda bergantung pada pengendali respons untuk melanjutkan status atau memulai proses lain, Anda harus memperhitungkannya. Sekali lagi, pengendali respons tidak akan dipanggil.