Top Banner
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 :
69

Tutorial Android

Nov 09, 2015

Download

Documents

Anas Yus

pengetahuan seputar android
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript

Tutorial Android : Contoh Aplikasi Sistem Informasi Akademik Berbasis AndroidHari 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 :

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,3 ke atas pengaksesan via httprequest tidak diperbolehkan langsung dari main UI. Solusinya bisa menggunakanAsyncTask(), 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,ogahdeh dimasukin ke pembiayaan 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 tentangcara 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 gan1. 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 folderdrawable-mdpi.Sekarang kita buat terlebih dahulu layout-nya (klik kanan folder layout > New > Android XML File).

Filemain.xml:

Fileubuntu.xml:

Filemandriva.xml:

Filearch.xml:

3. Masih berhubungan dengan tampilan alias layout. Saya tambahkan sedikit agar ketika salah satu tab terseleksi, maka icon-nya berubah. Buat 3 buah file xml dan tempatkan di folderdrawable.Filestyle_ubuntu.xml:

Filestyle_mandriva.xml:

Filestyle_arch.xml:

4. Sekarang kita melangkah ke pembuatan activity, karena sudah terdapat 1 file activity, jadinya kita hanya perlu membuat 3 activity lainnya.FileTabLayoutSederhana.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); }}FileUbuntuActivity.java:public class UbuntuActivity extends Activity{public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.ubuntu); }}FileMandrivaActivity.java:public class MandrivaActivity extends Activity {public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mandriva); }}FileArchActivity.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 fileAndroidManifest.xml. Kalau tidak didaftarkan, dijamin aplikasi akan force closed duluan :p.

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. OK deh, 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 yang tumben 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 tutorial android. 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 dariSQLiteDatabase 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 namaDBHelper.javayang meng-extends classSQLiteOpenHelper.1public class DBHelper extends SQLiteOpenHelper {

2public DBHelper(Context context) {

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

4}

5

6@Override

7public void onCreate(SQLiteDatabase db) {

8//db.execSQL("");

9}

10

11@Override

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

13//db.execSQL("");

14onCreate(db);

15}

16

17public void tambah(SQLiteDatabase db) {

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

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

20int lanjut =newRandom().nextInt(6);

21String nama_in = nama_sis[lanjut];

22String 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 fileSqliteToListviewActivity.javadan ketikkan code di bawah ini :1publicclassSqliteToListviewActivityextendsListActivity {

2

3privateSQLiteDatabase db;

4privateCursorAdapter data_sumber;

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

6DBHelper helper =newDBHelper(this);

7

8@Override

9publicvoid onCreate(Bundle savedInstanceState) {

10super.onCreate(savedInstanceState);

11ListView view = getListView();

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

13db = helper.getWritableDatabase();

14

15this.muat_ulang();

16this.tambahdata();

17}

18

19publicvoid muat_ulang()

20{

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

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

23setListAdapter(data_sumber);

24}

25

26publicvoid tambahdata()

27{

28helper.tambah(db);

29this.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()mirip dengan pattern active record di CI.Data dari database disimpan terlebih dahulu dalam CursorAdapter. Kemudian ditampilkan ke dalam ListView denga fungsisetListAdapter().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

2

7

8

16

25

26

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

Nah itu langkah-langkah dasar untuk membuat sebuah aplikasi database sederhana dengan memanfaatkan SQLite. Terus terang saja, ketika mencoba untuk membuat aplikasi ini sering mengalamiforced closesetiap 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 yang sejuk ini. Semoga bisa bermanfaat untuk rekan-rekan.Happy Blogging and Keep CodingTutorial 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 setengah 8 untuk berangkat kuliah yang jadwalnya sangat-sangat nanggungnyelempitdi 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, bila perlu 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 sebuahkalkulator biner sederhana di android. 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, syntaxnya 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 berooo1. 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.java1publicclassKalkulatorBinerActivityextendsActivity {

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

3EditText t_in,t_out;

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

5String var_in="";

6@Override

7publicvoid onCreate(Bundle savedInstanceState) {

8super.onCreate(savedInstanceState);

9requestWindowFeature(Window.FEATURE_NO_TITLE);

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

11setContentView(R.layout.main);

12

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

28

29b1.setOnClickListener(newOnClickListener() {

30publicvoid onClick(View v) {

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

32{

33var_in ="1";

34t_in.setText(var_in);

35}

36else

37{

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

39t_in.setText(var_in);

40}

41}

42});

43

44b2.setOnClickListener(newOnClickListener() {

45publicvoid onClick(View v) {

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

47{

48var_in ="2";

49t_in.setText(var_in);

50}

51else

52{

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

54t_in.setText(var_in);

55}

56}

57});

58

59b3.setOnClickListener(newOnClickListener() {

60publicvoid onClick(View v) {

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

62{

63var_in ="3";

64t_in.setText(var_in);

65}

66else

67{

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

69t_in.setText(var_in);

70}

71}

72});

73

74b4.setOnClickListener(newOnClickListener() {

75publicvoid onClick(View v) {

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

77{

78var_in ="4";

79t_in.setText(var_in);

80}

81else

82{

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

84t_in.setText(var_in);

85}

86}

87});

88

89b5.setOnClickListener(newOnClickListener() {

90publicvoid onClick(View v) {

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

92{

93var_in ="5";

94t_in.setText(var_in);

95}

96else

97{

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

99t_in.setText(var_in);

100}

101}

102});

103

104b6.setOnClickListener(newOnClickListener() {

105publicvoid onClick(View v) {

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

107{

108var_in ="6";

109t_in.setText(var_in);

110}

111else

112{

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

114t_in.setText(var_in);

115}

116}

117});

118

119b7.setOnClickListener(newOnClickListener() {

120publicvoid onClick(View v) {

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

122{

123var_in ="7";

124t_in.setText(var_in);

125}

126else

127{

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

129t_in.setText(var_in);

130}

131}

132});

133

134b8.setOnClickListener(newOnClickListener() {

135publicvoid onClick(View v) {

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

137{

138var_in ="8";

139t_in.setText(var_in);

140}

141else

142{

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

144t_in.setText(var_in);

145}

146}

147});

148

149b9.setOnClickListener(newOnClickListener() {

150publicvoid onClick(View v) {

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

152{

153var_in ="9";

154t_in.setText(var_in);

155}

156else

157{

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

159t_in.setText(var_in);

160}

161}

162});

163

164b0.setOnClickListener(newOnClickListener() {

165publicvoid onClick(View v) {

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

167{

168var_in ="0";

169t_in.setText(var_in);

170}

171else

172{

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

174t_in.setText(var_in);

175}

176}

177});

178

179b_hps.setOnClickListener(newOnClickListener() {

180publicvoid onClick(View v) {

181t_in.setText("");

182t_out.setText("");

183}

184});

185

186b_biner.setOnClickListener(newOnClickListener() {

187publicvoid onClick(View v) {

188if(var_in!="")

189{

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

191t_out.setText(hasil);

192var_in="";

193}

194

195}

196});

197

198b_ke_desimal.setOnClickListener(newOnClickListener() {

199publicvoid onClick(View v) {

200t_in.setText("");

201t_out.setText("");

202var_in="";

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

204startActivity(i);

205}

206});

207}

208

209publicString DesimalKeBiner(int angka_desimal)

210{

211int sisa_bagi=0, i=0;

212boolean ulang=true;

213int[] arr_simpan =newint[10000];

214sisa_bagi=angka_desimal;

215

216String hasil="";

217while(ulang==true)

218{

219sisa_bagi = angka_desimal%2;

220angka_desimal= angka_desimal/2;

221arr_simpan[i]=sisa_bagi;

222i++;

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

224{

225ulang=false;

226arr_simpan[i]=angka_desimal;

227}

228}

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

230{

231hasil += arr_simpan[a];

232}

233returnhasil;

234}

235

236publicboolean onCreateOptionsMenu(Menu menu) {

237MenuInflater inflater = getMenuInflater();

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

239returntrue;

240}

241

242publicboolean onOptionsItemSelected(MenuItem item) {

243switch(item.getItemId()) {

244caseR.id.tentang:

245AlertDialog alertDialog;

246alertDialog =newAlertDialog.Builder(this).create();

247alertDialog.setTitle("Sekilas Biner");

248alertDialog.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");

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

253@Override

254publicvoid onClick(DialogInterface dialog, int which) {

255dialog.dismiss();

256}

257});

258alertDialog.show();

259returntrue;

260caseR.id.keluar:

261Intentexit=newIntent(Intent.ACTION_MAIN);

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

263KalkulatorBinerActivity.this.finish();

264startActivity(exit);

265returntrue;

266default:

267returnsuper.onOptionsItemSelected(item);

268}

269}

270}

KalkulatorDesimalActivity.java1publicclassKalkulatorDesimalActivityextendsActivity {

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

3EditText t_in,t_out;

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

5String var_in="";

6@Override

7publicvoid onCreate(Bundle savedInstanceState) {

8super.onCreate(savedInstanceState);

9requestWindowFeature(Window.FEATURE_NO_TITLE);

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

11setContentView(R.layout.second);

12

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

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

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

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

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

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

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

20

21b1.setOnClickListener(newOnClickListener() {

22publicvoid onClick(View v) {

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

24{

25var_in ="1";

26t_in.setText(var_in);

27}

28else

29{

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

31t_in.setText(var_in);

32}

33}

34});

35

36b0.setOnClickListener(newOnClickListener() {

37publicvoid onClick(View v) {

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

39{

40var_in ="0";

41t_in.setText(var_in);

42}

43else

44{

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

46t_in.setText(var_in);

47}

48}

49});

50

51b_hps.setOnClickListener(newOnClickListener() {

52publicvoid onClick(View v) {

53t_in.setText("");

54t_out.setText("");

55}

56});

57

58b_desimal.setOnClickListener(newOnClickListener() {

59publicvoid onClick(View v) {

60if(var_in!="")

61{

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

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

64var_in="";

65}

66

67}

68});

69

70b_ke_biner.setOnClickListener(newOnClickListener() {

71publicvoid onClick(View v) {

72KalkulatorDesimalActivity.this.finish();

73}

74});

75}

76

77publicint BinerKeDesimal(int angka_desimal)

78{

79String bil = Integer.toString(angka_desimal);

80int[] arr_simpan=newint[10000];

81String[] str=newString[10000];

82double hasil=0;

83int hasil_akhir=0;

84int a=0;

85char t;

86

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

88{

89t = bil.charAt(i);

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

91}

92

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

94{

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

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

97hasil_akhir=hasil_akhir+(int)hasil;

98a++;

99}

100returnhasil_akhir;

101}

102

103publicboolean onCreateOptionsMenu(Menu menu) {

104MenuInflater inflater = getMenuInflater();

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

106returntrue;

107}

108

109publicboolean onOptionsItemSelected(MenuItem item) {

110switch(item.getItemId()) {

111caseR.id.tentang:

112AlertDialog alertDialog;

113alertDialog =newAlertDialog.Builder(this).create();

114alertDialog.setTitle("Sekilas Biner");

115alertDialog.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");

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

120@Override

121publicvoid onClick(DialogInterface dialog, int which) {

122dialog.dismiss();

123}

124});

125alertDialog.show();

126returntrue;

127caseR.id.keluar:

128Intentexit=newIntent(Intent.ACTION_MAIN);

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

130KalkulatorDesimalActivity.this.finish();

131startActivity(exit);

132returntrue;

133default:

134returnsuper.onOptionsItemSelected(item);

135}

136}

137}

3. Karena menggunakan 2 buah activity, otomatis juga membutuhkan 2 buah layout yang berbeda. Saya tambahkan satu layout untuk layout options menu, saya tempatkan pada foldermenu/opt_menu.xml. Jadi total terdapat 3 buah layout.main.xml1

2

7

8

13

14

23

24

35

36

37

38

43

44

53

54

65

66

67

68

73

74

84

85

95

96

106

107

108

113

114

124

125

135

136

146

147

148

153

154

164

165

175

176

186

187

188

193

194

205

206

216

217

227

228

229

234

235

246

247

248

second.xml1

2

7

8

13

14

23

24

35

36

37

38

43

44

53

54

65

66

67

68

73

74

84

85

86

91

92

102

103

104

109

110

120

121

131

132

133

138

139

150

151

152

opt_menu.xml1

2

5

8

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

2

6

7

8

9

12

15

16

17

18

19

20

21

22

23

24

5. Jalankan aplikasi via emulator, bisa juga dijalanlan langsung ke smartphone dengan 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

18May2012KATEGORI :TUTORIAL ANDROID- Dibaca : 7974 kaliDitulis oleh :Gede LumbungAda 33 Komentar SeruTutorial 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 menggantikan Jupiter ZakaBejo 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 danjodoh, 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.0 ke atas. Setelah mencari masalahnya dilogcat, ternyata mulai android versi 3.0 ke atas tidak diperbolehkan untuk mengakses internet secara langsung melalui main activity. Saya coba cari solusinya di stackoverflow dan solusinya kita bisa menggunakanAsyncTask. AsyncTask ini memungkinkan pengaksesan internet (background data) berjalan dibackground.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-extendsabstract class AsyncTask dan mendefinisikan ketiga method abstract-nya, yaituonPreExecute(),doInBackground(),danonPostExecute()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 dalam ArrayList 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 gan1. 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.

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

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

list_row.xml

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 data_map = new ArrayList();

@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 { @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 map = new HashMap();

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.

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 methodonPreExecute().

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