Tutorial Android : Contoh Aplikasi Sistem Informasi Akademik Berbasis Android

69
Tutorial Android : Contoh Aplikasi Sistem Informasi Akademik Berbasis Android Hari ini dan malam minggu kemarin, saya benar-benar menjadi penghuni setia di lab litbang kampus. Ngebut untuk membuat jurnal penelitian yang akan disetorkan ke kampus, demi sedikit recehan untuk makan- makan di KFC. Saya menargetkan 3 jurnal selesai dalam waktu 1 minggu ke depan, yaw mudah-mudahan saja bisa selesai tepat waktu. Ada ketentuan baru dalam pengajuan jurnal penelitian di kampus saya, ruang lingkupnya harus sudah setara dengan skripsi. Kalau bisa selesai 3 jurnal, artinya saya sudah 3 kali skripsi kali yaw (#haha). Salah satu dari ketiga jurnal tersebut, saya menyetorkan jurnal tentang aplikasi sistem informasi akademik berbasis android dengan memanfaatkan web service. Yuppzzz, pengembangan dari aplikasi yang saya seminarkan di KNSI STIKOM Bali bulan februari lalu. Lumayan tuh, bisa jadi judul skripsi bagi rekan-rekan yang belum punya judul skripsi (#ngakaks). Sekalian juga deh, saya bagikan contoh aplikasinya disini. Tapi harap maklum coding-nya masih acakadut, baru belajar nih+aplikasinya cuma dibuat dalam waktu 1 hari. Tampilannya masih sederhana, saya memanfaatkan sebuah class khusus untuk mengatur layout pada tampilan dashboard. Sehingga tombol-tombol yang nangkring disana akan fleksibel mengikuti ukuran layar. Hanya ada beberapa menu-menu standar, seperti melihat nilai, jadwal, cek kehadiran dosen, rangking angkatan, info kampus. Fitur KRS belum sempat saya buatkan, karena ruang lingkupnya memang segitu aja. Berikut skrinsutnya :

Transcript of Tutorial Android : Contoh Aplikasi Sistem Informasi Akademik Berbasis Android

Tutorial Android : Contoh Aplikasi Sistem Informasi Akademik Berbasis Android

Hari ini dan malam minggu kemarin, saya benar-benarmenjadi penghuni setia di lab litbang kampus. Ngebut untuk membuat jurnal penelitian yang akan disetorkan ke kampus, demi sedikit recehan untuk makan-makan di KFC. Saya menargetkan 3 jurnal selesai dalam waktu 1 minggu ke depan,yaw mudah-mudahan saja bisa selesai tepat waktu. Ada ketentuan baru dalam pengajuan jurnal penelitian di kampus saya, ruang lingkupnya harus sudah setara dengan skripsi. Kalau bisa selesai 3 jurnal, artinya saya sudah 3 kali skripsi kali yaw (#haha). Salah satu dari ketiga jurnal tersebut, saya menyetorkan jurnal tentang aplikasi sistem informasi akademik berbasis androiddengan memanfaatkan web service. Yuppzzz, pengembangan dari aplikasi yang sayaseminarkan di KNSI STIKOM Bali bulan februari lalu. Lumayan tuh, bisa jadi judul skripsi bagi rekan-rekan yang belum punya judul skripsi (#ngakaks). Sekalian juga deh, saya bagikan contoh aplikasinya disini. Tapi harap maklumcoding-nya masih acakadut, baru belajar nih+aplikasinya cuma dibuat dalam waktu 1 hari.

Tampilannya masih sederhana, saya memanfaatkan sebuah class khusus untuk mengatur layout pada tampilan dashboard. Sehingga tombol-tombol yang nangkringdisana akan fleksibel mengikuti ukuran layar. Hanya ada beberapa menu-menu standar, seperti melihat nilai, jadwal, cek kehadiran dosen, rangking angkatan, info kampus. Fitur KRS belum sempat saya buatkan, karena ruang lingkupnya memang segitu aja. Berikut skrinsutnya :

Sederhana banget kan..??? Dan parahnya saya baru tau kalau aplikasi ini tidak bisa berjalan di android versi 2,3 ke atas :(. Masalahnya ialah di android 2,3ke atas pengaksesan via httprequest tidak diperbolehkan langsung dari main UI.Solusinya bisa menggunakan AsyncTask(), silahkan ditambahkan sendiri yaw :p. OK deh, sekian dulu postingan singkat saya kali ini. Sekarang mau lanjut buat jurnalnya dulu, biar uangnya cepat cair (#haha). Semoga bisa bermanfaat untuk kita semua.

Happy Blogging and Keep Coding

Tutorial Android : Membuat Tab Layout Sederhana di Aplikasi Android12-year-old girl wins $256,000 lawsuit against her mother   (BWNToday)

Proses acc duit beasiswa hari ini cukup membuat saya jengkel, terkesan berbelit-belit dan dipersulit. Padahal itu beasiswa dari pusat, kalau misalnya datang dari kampus sih saya masih bisa terima prosesnya dipersulit. Saya menyesal, karena dulu duitnya langsung masuk ke rekening kampus, alasannya sih langsung dipakai untuk bayar semester depan. Besok-besok kalau duit seminar nasional saya sudah cair, ogah deh dimasukin kepembiayaan untuk semester depan, itu mah akal bulus kampus doang. Nahhh, daripada ruwet ngurusin kampus yang dari awal saya kuliah gak pernah benar (apalagi si engkong, dosen dewa yang gak pernah mau disalahkan), mending posting lagi tentang tutorial android. Tutorial sederhana kali ini membahas tentang cara membuat sebuah tab layout/tab menu di aplikasi android. Tab layout ini sama dengan tab menu di aplikasi-aplikasi pada umumnya, fungsinya agar bisa menampilkan beberapa tampilan dalam 1 halaman. Tampilan disini maksudnya adalah beberapa activity yang berbeda. Cara membuatnya cukup mudah dan berikut langkah-langkahnya. Cekidot gan…

1. Buat android project baru seperti biasanya.

2. Disini kita akan membuat 3 tab berbeda, yang membutuhkan 4 activity. 1 sebagai frame layout dan sisanya sebagai view yang akan nongol di frame tersebut. Otomatis juga membutuhkan 4 buah file layout xml. Agar keliatan lebih cakep, saya tambahkan beberapa icon dengan ekstensi .png dan saya tempatkan di folder drawable-mdpi. Sekarang kita buat terlebih dahulu layout-nya (klik kanan folder layout > New > Android XML File).

File main.xml :<?xml version="1.0" encoding="utf-8"?><TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabhost" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent"

android:layout_height="wrap_content" /> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="fill_parent"/> </LinearLayout></TabHost>File ubuntu.xml :<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" >

<TextView android:text="Ini Ubuntu" android:padding="15dip" android:textSize="18dip" android:layout_width="fill_parent" android:layout_height="wrap_content"/></LinearLayout>File mandriva.xml :<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" >

<TextView android:text="Ini Mandriva" android:padding="15dip" android:textSize="18dip" android:layout_width="fill_parent" android:layout_height="wrap_content"/></LinearLayout>File arch.xml :<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" >

<TextView android:text="Ini Arch Linux" android:padding="15dip" android:textSize="18dip" android:layout_width="fill_parent" android:layout_height="wrap_content"/></LinearLayout>

3. Masih berhubungan dengan tampilan alias layout. Saya tambahkan sedikit agarketika salah satu tab terseleksi, maka icon-nya berubah. Buat 3 buah file xml dan tempatkan di folder drawable.File style_ubuntu.xml :<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- When selected, use grey --> <item android:drawable="@drawable/ubuntu" android:state_selected="true" /> <!-- When not selected, use white--> <item android:drawable="@drawable/ubuntu_hover" /></selector>File style_mandriva.xml :<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- When selected, use grey --> <item android:drawable="@drawable/mandriva" android:state_selected="true" /> <!-- When not selected, use white--> <item android:drawable="@drawable/mandriva_hover" /></selector>File style_arch.xml :<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- When selected, use grey --> <item android:drawable="@drawable/arch" android:state_selected="true" /> <!-- When not selected, use white--> <item android:drawable="@drawable/arch_hover" /></selector>

4. Sekarang kita melangkah ke pembuatan activity, karena sudah terdapat 1 fileactivity, jadinya kita hanya perlu membuat 3 activity lainnya.

File TabLayoutSederhana.java :public class TabLayoutSederhanaActivity extends TabActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main);

TabHost tabHost = getTabHost();

TabSpec ubuntu = tabHost.newTabSpec("Ubuntu"); ubuntu.setIndicator("Ubuntu", getResources().getDrawable(R.drawable.style_ubuntu));

Intent ubuntuIntent = new Intent(this, UbuntuActivity.class); ubuntu.setContent(ubuntuIntent);

TabSpec mandriva = tabHost.newTabSpec("Mandriva"); mandriva.setIndicator("Mandriva", getResources().getDrawable(R.drawable.style_mandriva)); Intent mandrivaIntent = new Intent(this, MandrivaActivity.class); mandriva.setContent(mandrivaIntent);

TabSpec arch = tabHost.newTabSpec("Arch Linux"); arch.setIndicator("Arch Linux", getResources().getDrawable(R.drawable.style_arch)); Intent archIntent = new Intent(this, ArchActivity.class); arch.setContent(archIntent);

tabHost.addTab(ubuntu); tabHost.addTab(mandriva); tabHost.addTab(arch); }}File UbuntuActivity.java :public class UbuntuActivity extends Activity{

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.ubuntu); }}File MandrivaActivity.java :public class MandrivaActivity extends Activity {

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mandriva); }}File ArchActivity.java :public class ArchActivity extends Activity {

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.arch); }}5. Yang terakhir, kita perlu mendaftarkan file-file activity di atas ke dalam file AndroidManifest.xml. Kalau tidak didaftarkan, dijamin aplikasi akan forceclosed duluan :p.<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="dlmbg.pckg.tab.layout"

android:versionCode="1" android:versionName="1.0" >

<uses-sdk android:minSdkVersion="10" />

<application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".TabLayoutSederhanaActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".UbuntuActivity" /> <activity android:name=".MandrivaActivity" /> <activity android:name=".ArchActivity" /> </application>

</manifest>

6. Jalankan via emulator, kira-kira hasilnya seperti di bawah ini :

Tab Layout/Tab Menu ini sangat mempermudah kita untuk menangani beberapa view/activity, karena pengaksesannya yang berada dalam satu tampilan frame. OKdeh, sekian dulu postingan saya kali ini. Semoga bisa bermanfaat untuk rekan-rekan.

Happy Blogging and Keep Coding

Tutorial Android : Menampilkan Data dari Database SQLite ke ListViewMan arrested for feeding sausage to police horse   (BWNToday)

Haaahhh, baru bisa posting lagi di hari minggu yangtumben sejuk seperti ini. Kali ini saya nangkring di Lab. Litbang kampus, koneksi internetnya cukup kencang lah. Pokoknya kalo dipake donlod, yang liat pasti ngiler deh :D. Berhubung di rumah TV saya sedang bermasalah, sekalian saja saya nonton TV online dengan koneksi kencang yang nganggur di kampus. Cukup lama juga saya tidak nonton acara TV, biasanya paling nangkringin laptop. Sambil nonton TV online, saya mau berbagi sedikit nih tentang tutorialandroid. Yupzzz, android. Semoga rekan-rekan gak bosan dengan postingan saya yang akhir-akhir ini membahas tentang android. Kali ini saya akan membahas tentang database SQLite,dimana database ini sudah tersedia langsung di dalam OS android.Karena memang sama-sama SQL, querynya sama dengan database MySQL. Diawali dengan membuat database, membuat struktur tabel dan memanfaatkan adapter dari SQLiteDatabase untuk melakukan fungsi DML (Data Manipulation Language). Setelah itu, datanya akan ditampilkan ke dalam sebuah ListView dengan memanfaatkan CursorAdapter. Gak usah banyak penjelasan, kita langsung aja ke cara pembuatannya. Cekidot gan….

1. Buat android project baru seperti gambar di bawah ini :

2. Kita akan memanfaatkan SQLiteOpenHelper sebagai class yang berfungsi untuk menangani koneksi ke database. Diantaranya fungsi DDL (Data Definition Language) dan DML. Buat sebuah file class baru dengan nama DBHelper.javayang meng-extends class SQLiteOpenHelper.1 public class DBHelper extends SQLiteOpenHelper {

2     public DBHelper(Context context) {

3         super(context, "sekolah_db", null, 1);

4     }

5

6     @Override7     public void onCreate(SQLiteDatabase db) {

8         //db.execSQL("");

9     }

10

11     @Override

12     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

13         //db.execSQL("");

14         onCreate(db);

15     }

16

17     public void tambah(SQLiteDatabase db) {

18         String[] nama_sis = new String[] { "Gede", "Okky", "Untung", "Puji","Willy", "Ayus" };

19        String[] alamat_sis = new String[] { "Denpasar", "Banyuwangi", "Situbondo","Rogojampi", "Purwoharjo", "Rogojampi" };

20         int lanjut = new Random().nextInt(6);

21         String nama_in = nama_sis[lanjut];

22         String alamat_in = alamat_sis[lanjut];23         //db.execSQL("");

24     }

25 }Saya sisipkan sebuah function untuk melakukan input ke dalam tabel, value-nya saya acak dari beberapa string yang saya simpan di dalam sebuah array. Dan fungsi insert ini akan berjalan setiap kali aplikasi dibuka (taruh di event onCreate). Ouw yaw, itu ada syntax yang saya mark, querynya saya hilangkan karena tidak bisa disimpan ke dalam database blog ini :). Untuk melihat query-nya, silahkan donlod saja contoh programnya di akhir postingan ini.3. Sekarang kita buat sebuah activity yang akan menampilkan data dari dalam database SQLite ke dalam sebuah ListView. Buka file SqliteToListviewActivity.java dan ketikkan code di bawah ini :1 public class SqliteToListviewActivity extends ListActivity{

2

3     private SQLiteDatabase db;

4     private CursorAdapter data_sumber;

5     private static final String kolom[] = {"nama", "alamat",BaseColumns._ID };

6     DBHelper helper = new DBHelper(this);

7

8     @Override

9     public void onCreate(Bundle savedInstanceState) {

10         super.onCreate(savedInstanceState);

11         ListView view = getListView();

12         view.addHeaderView(getLayoutInflater().inflate(R.layout.row, null));

13         db = helper.getWritableDatabase();

14

15         this.muat_ulang();16         this.tambahdata();17     }

18

19     public void muat_ulang()

20     {

21         Cursor data = db.query("bio_siswa", kolom, null, null, null, null,null);

22         data_sumber = new SimpleCursorAdapter(this, R.layout.row, data, kolom,newint[] { R.id.nama, R.id.alamat });

23         setListAdapter(data_sumber);

24     }

25

26     public void tambahdata()

27     {

28         helper.tambah(db);29         this.muat_ulang();

30     }

31 }Untuk melakukan query untuk seleksi record dalam database, bisa menggunakan fungsi .rawquery() atau dengan .query(). Dan disini saya menggunakan fungsi .query() karena tidak perlu memasukkan perintah select SQL, .query() miripdengan pattern active record di CI. Data dari database disimpan terlebih dahulu dalam CursorAdapter. Kemudian ditampilkan ke dalam ListView denga fungsi setListAdapter().

4. Yang terakhir, kita perlu membuat sebuah desain layout untuk menampung data-data dari database. Buat sebuah file layout baru (klik kanan folder layout > New > Android XML File) dan ketikkan kode layout di bawah ini :

1 <?xml version="1.0" encoding="utf-8"?>2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"3     android:layout_height="wrap_content"

4     android:id="@+id/layoutBaris"

5     android:orientation="horizontal"

6     android:layout_width="fill_parent">

7

8     <TextView

9         android:layout_width="wrap_content"

10         android:layout_height="wrap_content"11         android:layout_alignParentLeft="true"

12         android:id="@+id/nama"

13         android:text="Nama"

14         android:textSize="15sp"

15         android:padding="10dip" />

16     <TextView

17         android:layout_width="wrap_content"

18         android:layout_alignParentRight="true"19         android:layout_height="wrap_content"

20         android:id="@+id/alamat"

21         android:text="Alamat"

22         android:gravity="right"

23         android:textSize="15sp"

24         android:padding="10dip" />

25

26 </RelativeLayout>

5. Tes aplikasi via emulator, kira-kira hasilnya seperti gambar di bawah ini :

Nah itu langkah-langkah dasar untuk membuat sebuah aplikasi database sederhanadengan memanfaatkan SQLite. Terus terang saja, ketika mencoba untuk membuat aplikasi ini sering mengalami forced close setiap akan mencobanya ke dalam emulatornya :(. Kebanyakan karena kesalahan mengisi parameter dari CursorAdapter dan SqliteOpenHelper nya. Setelah dicoba dan hampir putus asa, akhirnya bisa juga =)). OK deh, sekian dulu postingan saya di hari minggu yangsejuk ini. Semoga bisa bermanfaat untuk rekan-rekan.

Happy Blogging and Keep Coding

Tutorial Android : Membuat Kalkulator Biner-Desimal Sederhana di AndroidWoman killed from sneezing while driving   (BWNToday)

Kondisi tubuh yang kurang fit melanda saya mulai tadi pagi, gara-gara kemarin malam saya paksakan untuk begadang di ITSolution demi menyeselesaikan jurnal. Tidur jam setengah 4 dan bangun lagi jam setengah8 untuk berangkat kuliah yang jadwalnya sangat-sangat nanggung nyelempit di akhir pekan seperti ini. Belum lagi rasa rindu untuk pulang ke denpasar di pertengahan bulan seperti ini, namun apa daya pekerjaan dan tugas kampus yang masih numpuk minta giliran untuk di-action. Apalagi mata kuliah machine learning yang diajarkan oleh pak hadiq, yang selalu menjadi momok setiap kali seliweran di pikiran saya :(. Yang terpenting di bawa hepi+santai ajalah, bilaperlu tugasnya gak usah dikumpulin, dijamin tambah santai :ngakaks:. Nah, sambil mengisi waktu kosong di malam yang hawanya panas ini, saya akan membagikan sedikit tutorial untuk membuat sebuah kalkulator biner sederhana diandroid. Yuppzzz, memang sudah banyak tutorial yang berseliweran di internet yang membahas tentang cara konversi biner ke desimal maupun sebaliknya. Berhubung saya lagi sedang senang-senangnya membuat aplikasi sederhana di platform android, tak ada salahnya untuk dicoba. Hitung-hitung cari pengalaman+nambah postingan :p.

Yang terpenting di aplikasi kalkulator ini hanya proses perhitungannya saja, untuk event tombol cuma sekedar pemanis. Bagi yang sudah pernah membuat versi java-nya, syntax’nya sama saja. Tinggal mengubah atau menambahkan desain form bagi yang awalnya hanya berupa tampilan console. OK deh, kita langsung aja ke cara pembuatannya. Cekidot mas berooo…

1. Seperti biasa, buat android project baru terlebih dahulu.

2. Disini saya menggunakan 2 activity, yaitu KalkulatorBinerActivity untuk melakukan konversi dari desimal ke biner dan KalkulatorDesimalActivity untuk melakukan konveri dari biner ke desimal. Kodenya seperti di bawah ini :

KalkulatorBinerActivity.java

1 public class KalkulatorBinerActivity extends Activity{

2     /** Called when the activity is first created. */

3     EditText t_in,t_out;

4     Button b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b_hps,b_ke_desimal,b_biner;

5     String var_in="";

6     @Override

7     public void onCreate(Bundle savedInstanceState) {

8         super.onCreate(savedInstanceState);

9         requestWindowFeature(Window.FEATURE_NO_TITLE);

10        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

11         setContentView(R.layout.main);

12

13         t_in = (EditText) findViewById(R.id.txt_in);

14         t_out = (EditText) findViewById(R.id.txt_out);

15         b0 = (Button) findViewById(R.id.btn0);

16         b1 = (Button) findViewById(R.id.btn1);

17         b2 = (Button) findViewById(R.id.btn2);

18         b3 = (Button) findViewById(R.id.btn3);

19         b4 = (Button) findViewById(R.id.btn4);

20         b5 = (Button) findViewById(R.id.btn5);

21         b6 = (Button) findViewById(R.id.btn6);

22         b7 = (Button) findViewById(R.id.btn7);

23         b8 = (Button) findViewById(R.id.btn8);

24         b9 = (Button) findViewById(R.id.btn9);

25         b_hps = (Button) findViewById(R.id.btn_hapus);

26         b_ke_desimal = (Button) findViewById(R.id.btn_ke_desimal);

27         b_biner = (Button) findViewById(R.id.btn_biner);

28

29         b1.setOnClickListener(new OnClickListener() {

30             public void onClick(View v) {

31                 if(var_in.trim().equals(""))

32                 {

33                     var_in = "1";

34                     t_in.setText(var_in);

35                 }

36                 else

37                 {

38                     var_in = t_in.getText().toString()+"1";

39                     t_in.setText(var_in);

40                 }

41             }

42         });

43

44         b2.setOnClickListener(new OnClickListener() {

45             public void onClick(View v) {

46                 if(var_in.trim().equals(""))

47                 {

48                     var_in = "2";

49                     t_in.setText(var_in);

50                 }

51                 else

52                 {

53                     var_in = t_in.getText().toString()+"2";

54                     t_in.setText(var_in);

55                 }

56             }

57         });

58

59         b3.setOnClickListener(new OnClickListener() {

60             public void onClick(View v) {

61                 if(var_in.trim().equals(""))

62                 {

63                     var_in = "3";

64                     t_in.setText(var_in);

65                 }

66                 else

67                 {

68                     var_in = t_in.getText().toString()+"3";

69                     t_in.setText(var_in);

70                 }

71             }

72         });

73

74         b4.setOnClickListener(new OnClickListener() {

75             public void onClick(View v) {

76                 if(var_in.trim().equals(""))

77                 {

78                     var_in = "4";

79                     t_in.setText(var_in);

80                 }

81                 else

82                 {

83                     var_in = t_in.getText().toString()+"4";

84                     t_in.setText(var_in);

85                 }

86             }

87         });

88

89         b5.setOnClickListener(new OnClickListener() {

90             public void onClick(View v) {

91                 if(var_in.trim().equals(""))

92                 {

93                     var_in = "5";

94                     t_in.setText(var_in);

95                 }

96                 else

97                 {

98                     var_in = t_in.getText().toString()+"5";

99                     t_in.setText(var_in);

100                 }

101             }

102         });

103

104         b6.setOnClickListener(new OnClickListener() {

105             public void onClick(View v) {

106                 if(var_in.trim().equals(""))

107                 {

108                     var_in = "6";

109                     t_in.setText(var_in);

110                 }

111                 else

112                 {

113                     var_in = t_in.getText().toString()+"6";

114                     t_in.setText(var_in);

115                 }

116             }

117         });

118

119         b7.setOnClickListener(new OnClickListener() {

120             public void onClick(View v) {

121                 if(var_in.trim().equals(""))

122                 {

123                     var_in = "7";

124                     t_in.setText(var_in);

125                 }

126                 else

127                 {

128                     var_in = t_in.getText().toString()+"7";

129                     t_in.setText(var_in);

130                 }

131             }

132         });

133

134         b8.setOnClickListener(new OnClickListener() {

135             public void onClick(View v) {

136                 if(var_in.trim().equals(""))

137                 {

138                     var_in = "8";

139                     t_in.setText(var_in);

140                 }

141                 else

142                 {

143                     var_in = t_in.getText().toString()+"8";

144                     t_in.setText(var_in);

145                 }

146             }

147         });

148

149         b9.setOnClickListener(new OnClickListener() {

150             public void onClick(View v) {

151                 if(var_in.trim().equals(""))

152                 {

153                     var_in = "9";

154                     t_in.setText(var_in);

155                 }

156                 else

157                 {

158                     var_in = t_in.getText().toString()+"9";

159                     t_in.setText(var_in);

160                 }

161             }

162         });

163

164         b0.setOnClickListener(new OnClickListener() {

165             public void onClick(View v) {

166                 if(var_in.trim().equals(""))

167                 {

168                     var_in = "0";

169                     t_in.setText(var_in);

170                 }

171                 else

172                 {

173                     var_in = t_in.getText().toString()+"0";

174                     t_in.setText(var_in);

175                 }

176             }

177         });

178

179         b_hps.setOnClickListener(new OnClickListener() {

180             public void onClick(View v) {

181                 t_in.setText("");

182                 t_out.setText("");

183             }

184         });

185

186         b_biner.setOnClickListener(new OnClickListener() {

187             public void onClick(View v) {

188                 if(var_in!="")

189                 {

190                     String hasil = DesimalKeBiner(Integer.parseInt(var_in));

191                     t_out.setText(hasil);

192                     var_in="";

193                 }

194

195             }

196         });

197

198         b_ke_desimal.setOnClickListener(new OnClickListener() {

199             public void onClick(View v) {

200                 t_in.setText("");

201                 t_out.setText("");

202                 var_in="";

203                 Intent i = new Intent(getApplicationContext(), KalkulatorDesimalActivity.class);

204                 startActivity(i);

205             }

206         });

207     }

208

209     public String DesimalKeBiner(int angka_desimal)

210     {

211         int sisa_bagi=0, i=0;

212         boolean ulang=true;

213        int[] arr_simpan = new int[10000];

214         sisa_bagi=angka_desimal;

215

216         String hasil="";

217         while (ulang==true)

218         {

219             sisa_bagi = angka_desimal%2;

220             angka_desimal= angka_desimal/2;

221             arr_simpan[i]=sisa_bagi;

222             i++;

223             if((angka_desimal==0)||(angka_desimal==1))

224             {

225                 ulang=false;

226                 arr_simpan[i]=angka_desimal;

227             }

228         }

229         for (int a=i; a>=0;a--)

230         {

231             hasil += arr_simpan[a];

232         }

233         return hasil;

234     }

235

236     public boolean onCreateOptionsMenu(Menu menu) {

237         MenuInflater inflater = getMenuInflater();

238         inflater.inflate(R.menu.opt_menu, menu);

239         return true;

240     }

241

242     public boolean onOptionsItemSelected(MenuItem item) {

243         switch (item.getItemId()) {

244             case R.id.tentang:

245                 AlertDialog alertDialog;

246                alertDialog = new AlertDialog.Builder(this).create();

247                 alertDialog.setTitle("Sekilas Biner");

248                alertDialog.setMessage("Bilangan biner adalah salah satu sistem bilangan yang digunakan pada komputer. " +

249                        "Berbeda dengan sistem bilangan desimal yang sering kita gunakan sehari-hari, " +

250                        "sistem bilangan biner hanya menggunakan dua bilangan yaitu 0 (nol) dan 1 (satu). " +

251                         "\n\nSalam, Gede Lumbung\nhttp://gedelumbung.com");

252                 alertDialog.setButton("#OKOK", new DialogInterface.OnClickListener() {

253                     @Override

254                     public void onClick(DialogInterface dialog, int which){

255                         dialog.dismiss();

256                     }

257                 });

258                 alertDialog.show();

259                 return true;

260             case R.id.keluar:

261                 Intent exit = new Intent(Intent.ACTION_MAIN);

262

                exit.addCategory(Intent.CATEGORY_HOME);exit.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

263                 KalkulatorBinerActivity.this.finish();

264                 startActivity(exit);

265                 return true;

266             default:

267                 return super.onOptionsItemSelected(item);

268         }

269     }

270 }

KalkulatorDesimalActivity.java

1 public class KalkulatorDesimalActivity extends Activity{

2     /** Called when the activity is first created. */

3     EditText t_in,t_out;

4     Button b0,b1,b_hps,b_ke_biner,b_desimal;

5     String var_in="";

6     @Override

7     public void onCreate(Bundle savedInstanceState)

{

8         super.onCreate(savedInstanceState);

9         requestWindowFeature(Window.FEATURE_NO_TITLE);

10        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

11         setContentView(R.layout.second);

12

13         t_in = (EditText) findViewById(R.id.txt_in);

14         t_out = (EditText) findViewById(R.id.txt_out);

15         b0 = (Button) findViewById(R.id.btn0);

16         b1 = (Button) findViewById(R.id.btn1);

17         b_hps = (Button) findViewById(R.id.btn_hapus);

18         b_ke_biner = (Button) findViewById(R.id.btn_ke_biner);

19         b_desimal = (Button) findViewById(R.id.btn_desimal);

20

21         b1.setOnClickListener(new OnClickListener() {

22             public void onClick(View v) {

23                 if(var_in.trim().equals(""))

24                 {

25                     var_in = "1";

26                     t_in.setText(var_in);

27                 }

28                 else

29                 {

30                     var_in = t_in.getText().toString()+"1";

31                     t_in.setText(var_in);

32                 }

33             }

34         });

35

36         b0.setOnClickListener(new OnClickListener() {

37             public void onClick(View v) {

38                 if(var_in.trim().equals(""))

39                 {

40                     var_in = "0";

41                     t_in.setText(var_in);

42                 }

43                 else

44                 {

45                     var_in = t_in.getText().toString()+"0";

46                     t_in.setText(var_in);

47                 }

48             }

49         });

50

51         b_hps.setOnClickListener(new OnClickListener() {

52             public void onClick(View v) {

53                 t_in.setText("");

54                 t_out.setText("");

55             }

56         });

57

58         b_desimal.setOnClickListener(new OnClickListener() {

59             public void onClick(View v) {

60                 if(var_in!="")

61                 {

62                     int hasil = BinerKeDesimal(Integer.parseInt(var_in));

63                     t_out.setText(Double.toString(hasil));

64                     var_in="";

65                 }

66

67             }

68         });

69

70         b_ke_biner.setOnClickListener(new OnClickListener()

{

71             public void onClick(View v) {

72                 KalkulatorDesimalActivity.this.finish();

73             }

74         });

75     }

76

77     public int BinerKeDesimal(int angka_desimal)

78     {

79         String bil = Integer.toString(angka_desimal);

80         int[] arr_simpan= new int[10000];

81        String[] str= new String[10000];

82         double hasil=0;

83         int hasil_akhir=0;

84         int a=0;

85         char t;

86

87         for(int i=0;i < bil.length();i++)

88         {

89             t = bil.charAt(i);

90             str[i]=Character.toString(t);

91         }

92

93         for(int i=bil.length()-1; i>=0;i--)

94         {

95             arr_simpan[a]=Integer.parseInt(str[i]);

96             hasil= arr_simpan[a]* (Math.pow(2,a));

97             hasil_akhir=hasil_akhir+(int)hasil;

98             a++;

99         }

100         return hasil_akhir;

101     }

102

103     public boolean onCreateOptionsMenu(Menu menu) {

104         MenuInflater inflater = getMenuInflater();

105         inflater.inflate(R.menu.opt_menu, menu);

106         return true;

107     }

108

109     public boolean onOptionsItemSelected(MenuItem item) {

110         switch (item.getItemId()) {

111             case R.id.tentang:

112                 AlertDialog alertDialog;

113                 alertDialog

= new AlertDialog.Builder(this).create();

114                 alertDialog.setTitle("Sekilas Biner");

115                alertDialog.setMessage("Bilangan biner adalah salah satu sistem bilangan yang digunakan pada komputer. " +

116                        "Berbeda dengan sistem bilangan desimal yang sering kita gunakan sehari-hari, " +

117                        "sistem bilangan biner hanya menggunakan dua bilangan yaitu 0 (nol) dan 1 (satu). " +

118                         "\n\nSalam, Gede Lumbung\nhttp://gedelumbung.com");

119                 alertDialog.setButton("#OKOK", new DialogInterface.OnClickListener() {

120                     @Override

121                     public void onClick(DialogInterface dialog, int which){

122                         dialog.dismiss();

123                     }

124                 });

125                 alertDialog.show();

126                 return true;

127             case R.id.keluar:

128                 Intent exit = new Intent(Intent.ACTION_MAIN);

129

                exit.addCategory(Intent.CATEGORY_HOME);exit.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

130                 KalkulatorDesimalActivity.this.finish();

131                 startActivity(exit);

132                 return true;

133             default:

134                 return super.onOptionsItemSelected(item);

135         }

136     }

137 }

3. Karena menggunakan 2 buah activity, otomatis juga membutuhkan 2 buah layoutyang berbeda. Saya tambahkan satu layout untuk layout options menu, saya tempatkan pada folder menu/opt_menu.xml. Jadi total terdapat 3 buah layout.main.xml1 <?xml version="1.0" encoding="utf-8"?>

2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

3     android:layout_width="fill_parent"

4     android:layout_height="fill_parent"

5     android:orientation="vertical"

6     android:padding="10dip" >

7

8 <LinearLayout

9         android:layout_width="fill_parent"

10         android:layout_height="fill_parent"

11         android:layout_weight="1"

12         android:orientation="horizontal" >

13

14     <TextView

15         android:layout_width="68dp"

16         android:layout_height="wrap_content"

17         android:gravity="bottom"

18         android:singleLine="true"

19         android:text="Input : "

20         android:textSize="18sp"

21         android:textStyle="normal"

22         android:typeface="normal" />

23

24     <EditText

25         android:id="@+id/txt_in"

26         android:layout_width="fill_parent"

27         android:layout_height="wrap_content"

28         android:layout_weight="1"

29         android:editable="false"

30         android:gravity="bottom"

31         android:singleLine="true"

32         android:textSize="30sp"

33         android:textStyle="normal"

34         android:typeface="normal" />

35

36     </LinearLayout>

37

38 <LinearLayout

39         android:layout_width="fill_parent"

40         android:layout_height="fill_parent"

41         android:layout_weight="1"

42         android:orientation="horizontal" >

43

44     <TextView

45         android:layout_width="68dp"

46         android:layout_height="wrap_content"

47         android:gravity="bottom"

48         android:singleLine="true"

49         android:text="Output : "

50         android:textSize="18sp"

51         android:textStyle="normal"

52         android:typeface="normal" />

53

54     <EditText

55         android:id="@+id/txt_out"

56         android:layout_width="fill_parent"

57         android:layout_height="wrap_content"

58         android:layout_weight="1"

59         android:editable="false"

60         android:gravity="bottom"

61         android:singleLine="true"

62         android:textSize="30sp"

63         android:textStyle="normal"

64         android:typeface="normal" />

65

66     </LinearLayout>

67

68     <LinearLayout

69         android:layout_width="fill_parent"

70         android:layout_height="fill_parent"

71         android:layout_weight="1"

72         android:orientation="horizontal" >

73

74         <Button

75             android:id="@+id/btn7"

76             android:layout_width="fill_parent"

77             android:layout_height="fill_parent"

78             android:layout_weight="1"

79             android:gravity="center"

80             android:padding="0px"

81             android:text="7"

82             android:textSize="24sp"

83             android:textStyle="bold" />

84

85         <Button

86             android:id="@+id/btn8"

87             android:layout_width="fill_parent"

88             android:layout_height="fill_parent"

89             android:layout_weight="1"

90             android:gravity="center"

91             android:padding="0px"

92             android:text="8"

93             android:textSize="24sp"

94             android:textStyle="bold" />

95

96         <Button

97             android:id="@+id/btn9"

98             android:layout_width="fill_parent"

99             android:layout_height="fill_parent"

100             android:layout_weight="1"

101             android:gravity="center"

102             android:padding="0px"

103             android:text="9"

104             android:textSize="24sp"

105             android:textStyle="bold" />

106     </LinearLayout>

107

108     <LinearLayout

109         android:layout_width="fill_parent"

110         android:layout_height="fill_parent"

111         android:layout_weight="1"

112         android:orientation="horizontal" >

113

114         <Button

115             android:id="@+id/btn4"

116             android:layout_width="fill_parent"

117             android:layout_height="fill_parent"

118             android:layout_weight="1"

119             android:gravity="center"

120             android:padding="0px"

121             android:text="4"

122             android:textSize="24sp"

123             android:textStyle="bold" /

>

124

125         <Button

126             android:id="@+id/btn5"

127             android:layout_width="fill_parent"

128             android:layout_height="fill_parent"

129             android:layout_weight="1"

130             android:gravity="center"

131             android:padding="0px"

132             android:text="5"

133             android:textSize="24sp"

134             android:textStyle="bold" />

135

136         <Button

137             android:id="@+id/btn6"

138             android:layout_width="fill_parent"

139             android:layout_height="fill_parent"

140             android:layout_weight="1"

141             android:gravity="center"

142             android:padding="0px"

143             android:text="6"

144             android:textSize="24sp"

145             android:textStyle="bold" /

>

146     </LinearLayout>

147

148     <LinearLayout

149         android:layout_width="fill_parent"

150         android:layout_height="fill_parent"

151         android:layout_weight="1"

152         android:orientation="horizontal" >

153

154         <Button

155             android:id="@+id/btn1"

156             android:layout_width="fill_parent"

157             android:layout_height="fill_parent"

158             android:layout_weight="1"

159             android:gravity="center"

160             android:padding="0px"

161             android:text="1"

162             android:textSize="24sp"

163             android:textStyle="bold" />

164

165         <Button

166             android:id="@+id/btn2"

167             android:layout_width="fill_parent"

168             android:layout_height="fill_parent"

169             android:layout_weight="1"

170             android:gravity="center"

171             android:padding="0px"

172             android:text="2"

173             android:textSize="24sp"

174             android:textStyle="bold" />

175

176         <Button

177             android:id="@+id/btn3"

178             android:layout_width="fill_parent"

179             android:layout_height="fill_parent"

180             android:layout_weight="1"

181             android:gravity="center"

182             android:padding="0px"

183             android:text="3"

184             android:textSize="24sp"

185             android:textStyle="bold" />

186     </LinearLayout>

187

188     <LinearLayout

189         android:layout_width="fill_parent"

190         android:layout_height="fill_parent"

191         android:layout_weight="1"

192         android:orientation="horizontal" >

193

194         <Button

195             android:id="@+id/btn0"

196             android:layout_width="fill_parent"

197             android:layout_height="fill_parent"

198             android:layout_span="2"

199             android:layout_weight="1"

200             android:gravity="center"

201             android:padding="0px"

202             android:text="0"

203             android:textSize="23sp"

204             android:textStyle="bold" />

205

206         <Button

207             android:id="@+id/btn_hapus"

208             android:layout_width="fill_parent"

209             android:layout_height="fill_parent"

210             android:layout_weight="1"

211             android:gravity="center"

212             android:padding="0px"

213             android:text="#HAPUS"

214             android:textSize="23sp"

215             android:textStyle="bold" />

216

217         <Button

218             android:id="@+id/btn_biner"

219             android:layout_width="fill_parent"

220             android:layout_height="fill_parent"

221             android:layout_weight="1"

222             android:gravity="center"

223             android:padding="0px"

224             android:text="#OKOK"

225             android:textSize="23sp"

226             android:textStyle="bold" />

227     </LinearLayout>

228

229     <LinearLayout

230         android:layout_width="fill_parent"

231         android:layout_height="fill_parent"

232         android:layout_weight="1"

233         android:orientation="horizontal" >

234

235         <Button

236             android:id="@+id/btn_ke_desimal"

237             android:layout_width="fill_parent"

238             android:layout_height="fill_parent"

239             android:layout_span="2"

240             android:layout_weight="1"

241             android:gravity="center"

242             android:padding="0px"

243             android:text="Biner ke Desimal"

244             android:textSize="23sp"

245             android:textStyle="bold" />

246     </LinearLayout>

247

248 </LinearLayout>

second.xml1 <?xml version="1.0" encoding="utf-8"?>

2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

3     android:layout_width="fill_parent"

4     android:layout_height="fill_parent"

5     android:orientation="vertical"

6     android:padding="10dip" >

7

8 <LinearLayout

9         android:layout_width="fill_parent"

10         android:layout_height="fill_parent"

11         android:layout_weight="1"

12         android:orientation="horizontal" >

13

14     <TextView

15         android:layout_width="68dp"

16         android:layout_height="wrap_content"

17         android:gravity="bottom"

18         android:singleLine="true"

19         android:text="Input : "

20         android:textSize="18sp"

21         android:textStyle="normal"

22         android:typeface="normal" />

23

24     <EditText

25         android:id="@+id/txt_in"

26         android:layout_width="fill_parent"

27         android:layout_height="wrap_content"

28         android:layout_weight="1"

29         android:editable="false"

30         android:gravity="bottom"

31         android:singleLine="true"

32         android:textSize="30sp"

33         android:textStyle="normal"

34         android:typeface="normal" />

35

36     </LinearLayout>

37

38 <LinearLayout

39         android:layout_width="fill_parent"

40         android:layout_height="fill_parent"

41         android:layout_weight="1"

42         android:orientation="horizontal" >

43

44     <TextView

45         android:layout_width="68dp"

46         android:layout_height="wrap_content"

47         android:gravity="bottom"

48         android:singleLine="true"

49         android:text="Output : "

50         android:textSize="18sp"

51         android:textStyle="normal"

52         android:typeface="normal" />

53

54     <EditText

55         android:id="@+id/txt_out"

56         android:layout_width="fill_parent"

57         android:layout_height="wrap_content"

58         android:layout_weight="1"

59         android:editable="false"

60         android:gravity="bottom"

61         android:singleLine="true"

62         android:textSize="30sp"

63         android:textStyle="normal"

64         android:typeface="normal" />

65

66     </LinearLayout>

67

68     <LinearLayout

69         android:layout_width="fill_parent"

70         android:layout_height="fill_parent"

71         android:layout_weight="1"

72         android:orientation="horizontal" >

73

74         <Button

75             android:id="@+id/btn0"

76             android:layout_width="fill_parent"

77             android:layout_height="fill_parent"

78             android:layout_weight="1"

79             android:gravity="center"

80             android:padding="0px"

81             android:text="0"

82             android:textSize="24sp"

83             android:textStyle="bold" />

84     </LinearLayout>

85

86     <LinearLayout

87         android:layout_width="fill_parent"

88         android:layout_height="fill_parent"

89         android:layout_weight="1"

90         android:orientation="horizontal" >

91

92         <Button

93             android:id="@+id/btn1"

94             android:layout_width="fill_parent"

95             android:layout_height="fill_parent"

96             android:layout_weight="1"

97             android:gravity="center"

98             android:padding="0px"

99             android:text="1"

100             android:textSize="24sp"

101             android:textStyle="bold" />

102     </LinearLayout>

103

104     <LinearLayout

105         android:layout_width="fill_parent"

106         android:layout_height="fill_parent"

107         android:layout_weight="1"

108         android:orientation="horizontal" >

109

110         <Button

111             android:id="@+id/btn_hapus"

112             android:layout_width="fill_parent"

113             android:layout_height="fill_parent"

114             android:layout_weight="1"

115             android:gravity="center"

116             android:padding="0px"

117             android:text="#HAPUS"

118             android:textSize="23sp"

119             android:textStyle="bold" />

120

121         <Button

122             android:id="@+id/btn_desimal"

123             android:layout_width="fill_parent"

124             android:layout_height="fill_parent"

125             android:layout_weight="1"

126             android:gravity="center"

127             android:padding="0px"

128             android:text="#OKOK"

129             android:textSize="23sp"

130             android:textStyle="bold" />

131     </LinearLayout>

132

133     <LinearLayout

134         android:layout_width="fill_parent"

135         android:layout_height="fill_parent"

136         android:layout_weight="1"

137         android:orientation="horizontal" >

138

139         <Button

140             android:id="@+id/btn_ke_biner"

141             android:layout_width="fill_parent"

142             android:layout_height="fill_parent"

143             android:layout_span="2"

144             android:layout_weight="1"

145             android:gravity="center"

146             android:padding="0px"

147             android:text="Desimal ke Biner"

148             android:textSize="23sp"

149             android:textStyle="bold" />

150     </LinearLayout>

151

152 </LinearLayout>

opt_menu.xml1 <menu xmlns:android="http://schemas.android.com/apk/res/android">

2     <item android:id="@+id/tentang"

3     android:icon="@drawable/tentang"

4    android:title="Apa itu Biner?" />

5     <item android:id="@+id/keluar"

6     android:icon="@drawable/logout"

7    android:title="Keluar | Metu" />

8 </menu>

4. Yang terakhir, kita perlu mendaftarkan activity yang kedua di dalam file AndroidManifest.xml.

1 <?xml version="1.0" encoding="utf-8"?>

2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"

3     package="dlmbg.pckg.kalkulator.biner"

4     android:versionCode="1"

5     android:versionName="1.0" >

6

7    <uses-sdk android:minSdkVersion="10" />

8

9     <application

10         android:icon="@drawable/ic_launcher"

11         android:label="@string/app_name" >

12         <activity

13             android:name=".KalkulatorBinerActivity"

14             android:label="Kalkulator Biner" >

15             <intent-filter>

16                 <action

android:name="android.intent.action.MAIN" />

17

18                <category android:name="android.intent.category.LAUNCHER" />

19             </intent-filter>

20         </activity>

21        <activity android:name="KalkulatorDesimalActivity" android:label="Kalkulator Desimal"></activity>

22     </application>

23

24 </manifest>

5. Jalankan aplikasi via emulator, bisa juga dijalanlan langsung ke smartphonedengan menghubungkan via kabel usb (syaratnya, driver harus sudah terinstall)

Nahh, gampang kan cara pembuatannya…??? Kalkulator di atas masih bisa ditambahkan dengan fungsi untuk konversi ke hexadesimal dan oktal. Bisa juga ditambahkan tabel gerbang logika, jadinya ketika rekan-rekan sedang mengerjakan ujian mata kuliah sistem digital pasti terbantu (kalau dibolehkan bawa hape lho yaw :D). OK deh, sekian dulu postingan saya kali ini. Semoga bisa bermanfaat untuk kita semua.

Happy Blogging and Keep Coding

18May2012

KATEGORI : TUTORIAL ANDROID - Dibaca : 7974 kali Ditulis oleh : Gede Lumbung     Ada 33 Komentar Seru

Tutorial Android : Cara Menggunakan AsyncTask di Android105-year-old woman gets accepted into preschool   (BWNToday)

Akhirnya sampai di rumah dan bisa berlibur sejenak dari kegiatan yang aneh-aneh di pulau seberang. Dan yang terpenting saya bisa bertemu lagi dengan si Paijo, Jupiter MX baru yang akan menggantikanJupiter Z aka Bejo untuk menemani saya seliweran tiap harinya. Tadi malam, setelah sampai rumah saya langsung mengajak si Paijo jalan-jalan ke jalan byPass Ngurah Rai. Emang mantap dah si Paijo, larinya kencang bukan main :D. Semoga si Paijo bisa membuat saya lebih enteng rejeki dan jodoh, maklumlah saya sudah lama menyandang status #jombloGalau. Ngomong-ngomong soal  #galau (lagi), kemarin-kemarin saya sempat dilanda rasa #galau dengan aplikasi android yang saya buat, dimana selalu force close jika dijalankan di versi 3.0ke atas. Setelah mencari masalahnya di logcat, ternyata mulai android versi 3.0ke atas tidak diperbolehkan untuk mengakses internet secara langsung melalui main activity. Saya coba cari solusinya di stackoverflow dan solusinya kita bisa menggunakan AsyncTask. AsyncTask ini memungkinkan pengaksesan internet (background data) berjalan di background.Ketika pertama membaca dokumentasi cara penggunaannya di developer.android.com, saya bingung juga. Saya kira harus mengubah seluruh kode yang berfungsi untuk berkomunikasi via internet. Ternyata hanya perlu menambahkan sebuah class (di dalam public class main activity) yang meng-extends abstract class AsyncTask dan mendefinisikan ketiga method abstract-nya,yaitu onPreExecute(), doInBackground(), dan onPostExecute() pada main activity. Studi kasusnya pada postingan kali ini ialah menampilkan data ke dalam listview dan dicoba pada emulator dengan versi android 4.0.3 alias Ice Cream Sandwich. Proses parsing data dari format JSON dan menyimpannya ke dalamArrayList dilakukan di method doInBackground(). Kemudian untuk menampilkannya ke dalam listview dilakukan di method onPostExecute(). Dari method onCreate (main activity), kita hanya perlu memanggil class tersebut dengan menambahkan method execute(). Sekarang kita coba untuk membuatnya, cekidot gan…

1. Siapkan tabelnya terlebih dahulu, tabelnya masih sama seperti postingan yang kemarin. Setelah itu kita buat sebuah file php untuk memanggil data yang ada di dalam tabel dan kita atur sesuai format JSON.

<?phpinclude("koneksi.php");$q = mysql_query("SELECT * FROM tbl_artikel");$v = '{"berita" : [';while($r=mysql_fetch_array($q)){

if(strlen($v)<15){

$v .= '{"judul" : "'.strip_tags($r['judul']).'", "tanggal" : "'.$r['tanggal'].'", "waktu" : "'.$r['waktu'].'"}';

}else{

$v .= ',{"judul" : "'.strip_tags($r['judul']).'", "tanggal" : "'.$r['tanggal'].'", "waktu" : "'.$r['waktu'].'"}';

}

}$v .= ']}';

echo $v;?>

2. Buat sebuah android project baru dengan detail seperti di bawah ini :

3. Seperti biasa, ketika akan menampilkan data ke dalam listview android, kitamembutuhkan 2 buah layout, yaitu main.xml (berisi sebuah listview) dan list_row.xml (berisi textview untuk menempatkan data hasil parsing).

main.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical">

<ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="wrap_content" />

</LinearLayout>

list_row.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent"

android:layout_height="wrap_content" android:orientation="horizontal"> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="10dp" android:orientation="vertical">

<TextView android:id="@+id/judul" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="#fff" android:textSize="14sp" android:textStyle="bold" android:paddingBottom="2dip" />

<TextView android:id="@+id/tanggal" android:layout_width="fill_parent" android:layout_height="fill_parent" android:textColor="#fff" android:textSize="10sp" /> </LinearLayout>

</LinearLayout>

4. Class JSONParser yang saya gunakan masih sama dengan yang di tutorial-tutorial sebelumnya, seperti di bawah ini :

public class JSONParser {

static InputStream is = null;static JSONObject jObj = null;static String json = "";

public JSONParser() {

}

public JSONObject AmbilJson(String url) {

try {DefaultHttpClient httpClient = new DefaultHttpClient();HttpPost httpPost = new HttpPost(url);

HttpResponse httpResponse = httpClient.execute(httpPost);

HttpEntity httpEntity = httpResponse.getEntity();is = httpEntity.getContent();

} catch (UnsupportedEncodingException e) {e.printStackTrace();

} catch (ClientProtocolException e) {e.printStackTrace();

} catch (IOException e) {e.printStackTrace();

}

try {BufferedReader reader = new BufferedReader(new

InputStreamReader(is, "iso-8859-1"), 8);

StringBuilder sb = new StringBuilder();String line = null;while ((line = reader.readLine()) != null) {

sb.append(line + "\n");}is.close();json = sb.toString();

} catch (Exception e) {Log.e("Buffer Error", "Error converting result " +

e.toString());}

try {jObj = new JSONObject(json);

} catch (JSONException e) {Log.e("JSON Parser", "Error parsing data " +

e.toString());}

return jObj;

}}

5. Buka dan edit file TesAsyncTasActivity.java, ketikkan kode di bawah ini. Terdapat sebuah class baru dengan nama AmbilData yang meng-extends abstract class AsyncTask, dengan 3 method yang telah didefinisikan di dalamnya.

public class TesAsyncTaskActivity extends ListActivity {

static String in_judul = "judul";static String in_waktu = "tanggal";JSONArray str_json = null;public String lo_Koneksi,isi ;

private ProgressDialog pDialog;ArrayList<HashMap<String, String>> data_map = new

ArrayList<HashMap<String, String>>();

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Koneksi lo_Koneksi = new Koneksi(); isi = lo_Koneksi.isi_koneksi(); new AmbilData().execute(); }

class AmbilData extends AsyncTask<String, String, String> { @Override protected void onPreExecute() { super.onPreExecute(); pDialog = new ProgressDialog(TesAsyncTaskActivity.this); pDialog.setMessage("Sabar gan, masih ngambil data neh..."); pDialog.setIndeterminate(false); pDialog.setCancelable(true); pDialog.show(); }

protected String doInBackground(String... args) {

String link_url = isi+"berita.php"; JSONParser jParser = new JSONParser(); JSONObject json = jParser.AmbilJson(link_url);

try { str_json = json.getJSONArray("berita");

for(int i = 0; i < str_json.length(); i++){ JSONObject ar = str_json.getJSONObject(i);

HashMap<String, String> map = new HashMap<String, String>();

String judul = ar.getString("judul");

String waktu = ar.getString("tanggal")+" | "+ar.getString("waktu");

map.put(in_judul, judul); map.put(in_waktu, waktu);

data_map.add(map); } } catch (JSONException e) { e.printStackTrace(); } return null; }

protected void onPostExecute(String file_url) { pDialog.dismiss(); runOnUiThread(new Runnable() { public void run() { ListAdapter adapter = new SimpleAdapter(

TesAsyncTaskActivity.this, data_map,R.layout.list_row, new

String[] { in_judul, in_waktu}, new int[] {R.id.judul, R.id.tanggal}); setListAdapter(adapter); } });

} }}

6. Karena akan mengakses HTTPRequest, jangan lupa untuk menambahkan permisionnya pada file AndroidManifest.xml.

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="dlmbg.pckg.tes.asynctask" android:versionCode="1" android:versionName="1.0" >

<uses-sdk android:minSdkVersion="10" />

<application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity

android:name=".TesAsyncTaskActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-permission android:name="android.permission.INTERNET" />

</manifest>

7. Setelah selesai, sekarang kita coba jalankan pada sebuah emulator yang menggunakan android versi 4.0.3 atau 3.0 juga bisa. Akan muncul sebuah DialogBox yang sudah kita buat pada method onPreExecute().

Nah, sekarang ketika akan membuat aplikasi yang membutuhkan komunikasi data internet jangan lupa untuk menambahkan AsyncTask. Agar dapat berjalan di android versi yang lebih tinggi, mengingat saat ini sudah banyak hape android yang menggunakan OS versi terbaru. OK deh, sekian dulu postingan saya kali ini, semoga bermanfaat untuk rekan-rekan yang sedang dibuat galau gara-gara aplikasinya force close di android versi 3.0 ke atas :D.

Happy Blogging and Keep Coding