Tutorial Android Asynctask – Komunikasi ke server dengan Progressbar

Sudah lama tidak nulis tutorial android, ternyata agak susah juga untuk mulainya. Padahal sekarang sudah punya banyak waktu luang. Walaupun satu bulan kemarin waktu banyak terpakai untuk menyelesaikan tesis. Hayoo agus kamu harus produktif, tidak boleh ada alasan lagi untuk membuatmu tak produktif. Wah kok jadi curhatyah hehehehe.

Kembali ketopik, tentunya pertanyaan yang pertama kali muncul adalah Apasih Asynchtask itu ?

Kalau menurut developer.andorid.com

“An asynchronous task is defined by a computation that runs on a background thread and whose result is published on the UI thread.”

Terjemahan bebasnya kira-kira beginini. Asynchtask ini digunakan untuk memanggil proses yang dijalankan secara background thread yang mana hasil dari proses ini akan mengupdate suatu nilai ada thread User Intreface (UI).

Intinya selama ini kita menggunakan hanya satu thread untuk user interface dan proses background, dan ini dapat membuat Aplikasi kita seakan-akan freeze. Dengan  Asynchtask proses backgorund dikerjakan dengan thread yang terpisah.

Pasti ada pertanyaan lagi, thread baru dengar istilahnya. Untuk yang ini saya kasih penjelasan singkat saja, kalau dijava thread ini digunakan untuk paralel proses. Contohnya kita mau membaca data dari sebuah text file lalu data itu ingin kita masukkan ke database. Naha kalau datanya hanya 1000 line, kita tidak perlu paralel proses, tetapi kalau datanya sudah jutaan atau lebih. Maka paralel proses diperlukan dan disinilah gunanya thread. Bahkan sempat ada candaan, kalau belum bisa pakai thread dijava berarti belum bisa java hehehe. Untuk mengetahui tentang thread lebih lanjut bisa cari digoogle atau beli buku java, kalau mau lebih enak tanya dosen javanya (jangan sungkan tanya ke dosen yah, dosen itu senang loh kalau ada mahasiswa yang bertanya).

Kenapasih kok kita perlu gunakan asynctask ?

Pertanyaan bagus nih, untuk menjawab pertanyaan ini kita koding saja yuk. Masih ingat tutorial Android Komunikasi dengan Server. Nah disitu kalau kita klik login maka akan memanggil keserver permasalahannya apabila koneksi lagi lambat,  kita tidak tahu apakah request kita sudah dijalankan dan ini dapat membuat kita menekan tombol login lagi.

Mari kita mulai langkah-langkahnya.

  1. Buka project AndroidHttp yang telah kita buat pada tutorial Android Komunikasi dengan Server.
  2. Buka class MainActivity.java lalu rubah seperti dibawah ini
package com.agus.android.http;


/**
 * Class MainActivity
 * @version 1.1 Oct 13, 2012
 * @author Agus Haryanto (agus.superwriter@gmail.com)
 * @website http://agusharyanto.net
 */

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {
	private EditText txtUser;
	private EditText txtPassword;
	private EditText txtStatus;
	private Button btnLogin;
	private String surl = "http://agusharyanto.net/android/login.php";
	/**
	 * Method yang dipanggil pada saat aplikaasi dijalankan
	 * */
	@Override
	public void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		txtUser = (EditText) findViewById(R.id.txtUser);
		txtPassword = (EditText) findViewById(R.id.txtPassword);
		txtStatus = (EditText) findViewById(R.id.txtStatus);
		btnLogin = (Button) findViewById(R.id.btnLogin);
		//daftarkan even onClick pada btnLogin
		 btnLogin.setOnClickListener(new Button.OnClickListener(){
	            public void onClick(View v){	            	            	
	            	readWebpage(v);
	            }
	        });

	}

	/**
	 * Method untuk Mengirimkan data keserver
	 * 
	 */
	public String getRequest(String Url){
       String sret;
        HttpClient client = new DefaultHttpClient();
        HttpGet request = new HttpGet(Url);
        try{
            HttpResponse response = client.execute(request);
            sret= request(response);
        }catch(Exception ex){
           sret= "Failed Connect to server!";
        }
        return sret;
                
    }
	/**
	 * Method untuk Menerima data dari server
	 * @param response
	 * @return
	 */
	public static String request(HttpResponse response){
        String result = "";
        try{
            InputStream in = response.getEntity().getContent();
            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
            StringBuilder str = new StringBuilder();
            String line = null;
            while((line = reader.readLine()) != null){
                str.append(line + "\n");
            }
            in.close();
            result = str.toString();
        }catch(Exception ex){
            result = "Error";
        }
        return result;
    }
	
	
	/**
	 * Class CallWebPageTask untuk implementasi class AscyncTask 
	 */
	private class CallWebPageTask extends AsyncTask<String, Void, String> {
		
		private ProgressDialog dialog;
		protected Context applicationContext;

		@Override
		protected void onPreExecute() {
			this.dialog = ProgressDialog.show(applicationContext, "Login Process", "Please Wait...", true);
		}
		
	    @Override
	    protected String doInBackground(String... urls) {
	      String response = "";
	      response = getRequest(urls[0]);
	      return response;
	    }

	    @Override
	    protected void onPostExecute(String result) {
	    	this.dialog.cancel();
	    	txtStatus.setText(result);
	    }
	  }

	  public void readWebpage(View view) {
	    CallWebPageTask task = new CallWebPageTask();
	    task.applicationContext = MainActivity.this;
	    String url =surl+"?user="+txtUser.getText().toString()+"&password="+txtPassword.getText().toString();
	    task.execute(new String[] { url });

	  }
	
}



Pada kode diatas, kita menambahkan sub class CallWebPageTask yang meng extends class AsyncTask.

Pada btnLogin sekarang click Listenernya memanggil method readWebPage yang akan memnjalankan

class CallWebPageTask.

Pada Asynctask jika dijalankan akan menjalani 4 proses yaitu

  1. onPreExecute( ) dipanggil sebelum proses doInbackground dijalankan. Biasanya disini kita bisa munculkan progressbar.
  2. doInbackground(Params… ) dipanggil setelah code yang ada pada method onPreExecutte dijalankan. Disinilah biaanya proses yang memakan waktu lama dijalankan seperti permintaan data ke server, komputasi yang membutuhkan waktu lama.
  3. onProgressUpdate(Progress…) dipanggil jika pada doinBackground ada yang memanggil method publishProgress. Biasanya bisa kita gunakan untuk mengetahui progress download dari sebuah file.
  4. onPostExecute(Result…) dipanggil setelah proses doinBackground selesai, method ini akan membaca hasil proses dari doInBackground yang digunakan untuk mengupdate nilai pada user interface. Jangan lupa menambahkan code untuk menutup progressbar.

Untuk itulah pada class CallWebPageTask Kita harus mengoveride ke method-method diatas sesuai dengan kebutuhan kita.

Sekarang marikita jalankan programnya.

Wow keren, sekarang aplikasi kita lebih responsif dan peduli dengan user. Dengan munculnya progressbar user jadi tahu kalau aplikasi kita sedang memproses requestnya.

Terakhir sebagai penutup.

Saya kutif kata-kata untuk kita renungkan.

“Di banyak hal, kita ini tidak bisa mewujudkan sesuatu bukan karena tidak bisa, tapi karena lemahnya kemauan.”

saya ambil dari http://dahlaniskan.wordpress.com/2012/10/08/bayang-bayang-pak-sum-di-atas-laut-benoa/

Semoga Bermanfaat

Salam Hangat

Agus Haryanto

Sumber:

http://developer.android.com

http://www.vogella.com/

“Ingin belajar android atau mencari tutorial android berbahasa indonesia, kunjungi http://agusharayanto.net

24 comments to Tutorial Android Asynctask – Komunikasi ke server dengan Progressbar

  • Andra

    pertamax dulu 😀

  • noni

    pak, tutorialnya keren keren…
    aku boleh request gak pak???
    bikin game android yang multiple choice gitu gmana yha?? masukin soal+jawaban di SQLitenya harus lewat coding ya pak?
    trus kalo mau kasih time limit itu gmana pak??

    mohon pencerahannya..

  • Dan

    Pak, boleh sekali-kali bikin contoh kasus yg pake method setter dan getter pak
    Jadi cukup deklarasikan bberapa variabel dan method2 nya, sehingga bisa dipakai activity yg berbeda (reusable).. Saya masih bingung caranya pak , thanks 😀

  • Agus Haryanto

    @Dan, Setter dan Getter ini salah satu konsep OOP, nah coba perdalam OOP di java, nanti akan mengerti dengan sendirinya.

  • rara

    cara munculin R.id-nya gimana ? kok gk muncul ? maklum masih newbi

  • Agus Haryanto

    @rara, harusnya dia muncul otomatis.

  • sangat menyenangkan belajar disini walaupun msh blm berhasil jg tp tetap
    menyenangkan,
    request bole ya om? kalau bikin launcher sendiri gimana caranya?
    terimakasih 🙂

  • fenli

    wih.. mantap tutorialnya pak..
    lama g mampir ksini tryata sudah bnyak tutorialnya..
    saya juga kl nulis tutor biasanya terinspirasi dari blog ini.. hehe..

    salam sesama android developer.. 😀

  • gan bisa share aplikasi android yg dijadiin remote buat powerpoint berbasi bluetooth ??

  • Mitha

    Bagus banget tutorialnya mas. kalo buat munculin tampilan baru setelah berhasil Login gmn caranya ya mas? Trus klo amu buat cara registrasi..? mohon bantuannya mas master he2.. terima kasih

  • yogi

    Mas bisa gak posting judul2 untuk TA yang berbasis Android

  • henri

    Selamat sore mas ,saya tertarik dengan Tutorial Android Asynctask – Komunikasi ke server dengan Progressbar dan telah saya coba berhasil mas,kalau saya mau menabakan selah succes login langusng membuka from atau activity (cotoh from menu) dimana saya harus tambahkan

    Intent i = new Intent(MainActivity .this, Menu.class);
    startActivity(i);

    atas bantuannya saya ucapkan terima kasih

  • kangmasvian

    mantab mas, ijin untuk mencoba asynctasknya nih, terima kasih banyak

  • teteh

    Selamat sore mas ,saya tertarik dengan Tutorial Android Asynctask – Komunikasi ke server dengan Progressbar dan telah saya coba berhasil mas,kalau saya mau menabakan selah succes login langusng membuka from atau activity (cotoh from menu) dimana saya harus tambahkan

    Intent i = new Intent(MainActivity .this, Menu.class);
    startActivity(i);

    atas bantuannya saya ucapkan terima kasih

  • didi

    @teteh : apakah sudah ketemu solusinya? saya juga sedang mengerjakan hal yang sama dan belum berhasil

  • edo

    Lumayan nih dapat referensi bagus buat belajar Android.

  • ifan

    bang mau nanya lgi nih gmn yah caranya memberikan pesan update aplikasi apabila ada penambahan data pada database web service yang digunakan pada aplikasi ?

  • Agus Haryanto

    @ifan, Kalau mau bagus pakai GCM (push). Dan Aplikasinya bisa diset smart melakukan sinkronisasi data otomatis ke server

  • Thanks mas….

    Tutorialnya simple dan jelas…

  • Tutorialnya jelas dan lengkap, sangat bermanfaat.

  • Andri

    Tutorialnya menarik, jika protokol yang digunakan https dengan host server sebagai inputan gmn mas?

  • terima kasih gan sangat membantu (y)

  • zaoldyeck

    kenapa saat menjalankan satusnya mission failed mohon pencerahan

  • Setyo Prakoso

    Saya coba tutorial yang ini juga yang Android Komunikasi dengan Server,
    tapi di status selalu tertulis Failed Connect to server
    kenapa ya pak,
    oya saya pake AppServ, apakah pengaruh ?

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>