Saturday, September 7, 2013

Dependency Injection di Android menggunakan RoboGuice

RoboGuice adalah sebuah framework untuk Dependency Injection di Android. Roboguice membuat code kita jadi lebih simple dan lebih mudah.
RoboGuice dapat melakukan inject View, Resource, System Service atau object lain.

Pada tutorial ini saya ingin menjelaskan sekilas saja contoh penggunaannya.
Langkah pertama download library jar RoboGuice terlebih dulu. pada contoh ini menggunakan roboguice versi 2.0

Library jar pendukung yg diperlukan adalah :
  1. Guice.3.0-no_aop.jar  : https://github.com/roboguice/roboguice/tree/master/roboguice/lib
  2. Roboguice-2.0.jar :  http://repo1.maven.org/maven2/org/roboguice/roboguice/2.0/
  3. Javax.inject-1.jar : http://mvnrepository.com/artifact/javax.inject/javax.inject


Import semua jar tersebut ke dalam forlder ‘libs’ android project kita.

Mungkin dengan banyaknya element (misal : TextView, InputText, Button dll )  yg kita gunakan di sebuah Activity akan membuat kita lebih banyak juga menuliskan code untuk casting findById().
Misalnya : (TextView)   findById(R.id.text_name);
Jika tidak dilakukan hal ini maka element yg kita panggil nanti akan null.
Mungkin jika cuma beberapa tidak masalah. Tapi jika sudah banyak sekali jumlahnya jadi membosankan juga ngetiknya.
Roboguice bisa menjembatani hal ini. 

Mari kita lihat contoh dari code yg default tanpa Injection.

 class TestAtivity extends Activity {   
    TextView name;   
    ImageView thumbnail;   
    LocationManager loc;   
    Drawable icon;   
    String myName;   
    public void onCreate(Bundle savedInstanceState) {   
      super.onCreate(savedInstanceState);   
      setContentView(R.layout.main);  
      name   = (TextView) findViewById(R.id.name);   
      thumbnail = (ImageView) findViewById(R.id.thumbnail);   
      loc    = (LocationManager) getSystemService(Activity.LOCATION_SERVICE);   
      icon   = getResources().getDrawable(R.drawable.icon);   
      myName  = getString(R.string.app_name);   
      name.setText( "Hello, " + myName );   
    }   
  }   

Sekarang kita lihat code yg menggunakan roboguice Injection.

 class TestActivity extends RoboActivity {   
    @InjectView(R.id.name)       TextView name;   
    @InjectView(R.id.thumbnail)    ImageView thumbnail;   
    @InjectResource(R.drawable.icon)  Drawable icon;   
    @InjectResource(R.string.app_name) String myName;   
    @Inject              LocationManager loc;   
    public void onCreate(Bundle savedInstanceState) {   
      super.onCreate(savedInstanceState);   
      setContentView(R.layout.main);  
      name.setText( "Hello, " + myName );   
    }   
  }   

Code yg menggunakan RoboGuice jadi lebih pendek dan sederhana. Baris codenya jadi lebih pendek. Mungkin ini bisa menghemat waktu kita dalam mengetik code.

Langkahnya cukup simple Activity yg kita buat tinggal extendnya kita ubah ke RoboActivity.
Kemudian di deklarasi elementnya ditambahkan @InjectView(id). Id ini diambil dari R id element yg sudah kita buat di layout xml.
Misalnya :  @InjectView(R.id.name) TextView name;

Maka di dalam method onCreate() kita tidak perlu lagi casting findById().
Kita bisa langsung memanggil element itu tanpa takut nilainya null. Misalnya ; name.setText( "Hello, " + myName );
Karena sudah dihandle oleh RoboGuice.

Sekian dulu tutorial dari saya. Mungkin hanya sampai pada injectView saja. Untuk bagian selanjutnya akan saya jelaskan di tutorial selanjutnya.
Untuk penjelasan yang lebih lengkap bisa juga dilihat di https://github.com/roboguice/roboguice/wiki

Selamat mencoba.

Thanks. :)

1 comments:

Unknown said...

One of the good RoboGuice tutorials.I've read today! Thank you! Have a good day! :)

Post a Comment