Tutorial Android Contoh Aplikasi Sistem
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 :
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
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 Android
12-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 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
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 langkahlangkahnya. 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 :
File ubuntu.xml :
File mandriva.xml :
File arch.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
folder drawable.
File style_ubuntu.xml :
File style_mandriva.xml :
File style_arch.xml :
4. Sekarang kita melangkah ke pembuatan activity, karena sudah terdapat 1 file activity,
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 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 ListView
Man 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 akhirakhir 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
@Override
7
public void onCreate(SQLiteDatabase db) {
8
//db.execSQL("");
9
}
10
11
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int
newVersion) {
13
//db.execSQL("");
14
onCreate(db);
15
}
16
17
public void tambah(SQLiteDatabase db) {
12
18
String[] nama_sis = new String[]
{ "Gede", "Okky", "Untung", "Puji","Willy", "Ayus" };
String[] alamat_sis = new String[]
19 { "Denpasar", "Banyuwangi", "Situbondo","Rogojampi", "Purwoharjo", "Rogojam
pi" };
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
9
10
11
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ListView view = getListView();
view.addHeaderView(getLayoutInflater().inflate(R.layout.row,
12
null));
13
db = helper.getWritableDatabase();
14
15
this.muat_ulang();
16
this.tambahdata();
17
}
18
19
20
public void muat_ulang()
{
Cursor data = db.query("bio_siswa", kolom, null, null, null,
21
null,null);
data_sumber = new SimpleCursorAdapter(this, R.layout.row, data,
kolom,newint[] { R.id.nama, R.id.alamat });
23
setListAdapter(data_sumber);
24
}
25
22
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() mirip dengan
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
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
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 yang sejuk ini. Semoga bisa bermanfaat untuk rekan-rekan.
Happy Blogging and Keep Coding
Tutorial Android : Membuat Kalkulator BinerDesimal Sederhana di Android
Woman 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 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,
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 sebuah kalkulator 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 senangsenangnya 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
11
12
getWindow().setFlags(WindowManager.LayoutParams
.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.main);
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
30
b1.setOnClickListener(new OnClickListener() {
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
60
b3.setOnClickListener(new OnClickListener() {
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
90
b5.setOnClickListener(new OnClickListener() {
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
120
b7.setOnClickListener(new OnClickListener() {
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
165
b0.setOnClickListener(new OnClickListener() {
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
199
200
b_ke_desimal.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
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
249
250
251
alertDialog.setMessage("Bilangan biner adalah salah satu
sistem bilangan yang digunakan pada komputer. " +
"Berbeda dengan sistem bilangan desimal yang
sering kita gunakan sehari-hari, " +
"sistem bilangan biner hanya menggunakan dua
bilangan yaitu 0 (nol) dan 1 (satu). " +
"\n\nSalam, Gede
Lumbung\nhttp://gedelumbung.com");
252
alertDialog.setButton("#OKOK", new DialogInterface.OnClickL
istener() {
253
254
@Override
public void onClick(DialogInterface dialog, int which)
{
255
dialog.dismiss();
256
}
257
});
258
alertDialog.show();
259
return true;
260
case R.id.keluar:
26
1
Intent exit = new Intent(Intent.ACTION_MAIN);
26
exit.addCategory(Intent.CATEGORY_HOME);exit.setFlags(Intent
2 .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);
getWindow().setFlags(WindowManager.LayoutParams
.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
10
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
22
b1.setOnClickListener(new OnClickListener() {
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
101
return hasil_akhir;
}
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
116
117
118
119
alertDialog.setMessage("Bilangan biner adalah salah satu
sistem bilangan yang digunakan pada komputer. " +
"Berbeda dengan sistem bilangan desimal yang
sering kita gunakan sehari-hari, " +
"sistem bilangan biner hanya menggunakan dua
bilangan yaitu 0 (nol) dan 1 (satu). " +
"\n\nSalam, Gede
Lumbung\nhttp://gedelumbung.com");
alertDialog.setButton("#OKOK", new DialogInterface.OnClickL
istener() {
120
121
@Override
public void onClick(DialogInterface dialog, int which)
{
122
dialog.dismiss();
123
}
124
});
125
alertDialog.show();
126
return true;
127
128
case R.id.keluar:
Intent exit = new Intent(Intent.ACTION_MAIN);
12
exit.addCategory(Intent.CATEGORY_HOME);exit.setFlags(Intent
9 .FLAG_ACTIVITY_NEW_TASK);
13
0
KalkulatorDesimalActivity.this.finish();
131
startActivity(exit);
132
return true;
133
134
default:
return super.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
folder menu/opt_menu.xml. Jadi total terdapat 3 buah layout.
main.xml
1
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
187
188
193
194
205
206
216
217
227
228
229
234
235
246
247
248
second.xml
1
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
103
104
109
110
120
121
131
132
133
138
139
150
151
152
opt_menu.xml
1
2
5
8
4. Yang terakhir, kita perlu mendaftarkan activity yang kedua di dalam file
AndroidManifest.xml.
1
2
6
7
8
9
10
12
15
16
17
18
19
20
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
18May
2012
KATEGORI : TUTORIAL ANDROID - Dibaca : 7974 kali
Ditulis oleh : Gede Lumbung
Ada 33 Komentar Seru
Tutorial Android : Cara Menggunakan AsyncTask di
Android
105-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 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.0 ke atas. Setelah
mencari masalahnya di logcat, 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 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 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 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.
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.
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 :
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
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 Android
12-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 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
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 langkahlangkahnya. 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 :
File ubuntu.xml :
File mandriva.xml :
File arch.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
folder drawable.
File style_ubuntu.xml :
File style_mandriva.xml :
File style_arch.xml :
4. Sekarang kita melangkah ke pembuatan activity, karena sudah terdapat 1 file activity,
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 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 ListView
Man 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 akhirakhir 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
@Override
7
public void onCreate(SQLiteDatabase db) {
8
//db.execSQL("");
9
}
10
11
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int
newVersion) {
13
//db.execSQL("");
14
onCreate(db);
15
}
16
17
public void tambah(SQLiteDatabase db) {
12
18
String[] nama_sis = new String[]
{ "Gede", "Okky", "Untung", "Puji","Willy", "Ayus" };
String[] alamat_sis = new String[]
19 { "Denpasar", "Banyuwangi", "Situbondo","Rogojampi", "Purwoharjo", "Rogojam
pi" };
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
9
10
11
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ListView view = getListView();
view.addHeaderView(getLayoutInflater().inflate(R.layout.row,
12
null));
13
db = helper.getWritableDatabase();
14
15
this.muat_ulang();
16
this.tambahdata();
17
}
18
19
20
public void muat_ulang()
{
Cursor data = db.query("bio_siswa", kolom, null, null, null,
21
null,null);
data_sumber = new SimpleCursorAdapter(this, R.layout.row, data,
kolom,newint[] { R.id.nama, R.id.alamat });
23
setListAdapter(data_sumber);
24
}
25
22
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() mirip dengan
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
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
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 yang sejuk ini. Semoga bisa bermanfaat untuk rekan-rekan.
Happy Blogging and Keep Coding
Tutorial Android : Membuat Kalkulator BinerDesimal Sederhana di Android
Woman 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 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,
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 sebuah kalkulator 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 senangsenangnya 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
11
12
getWindow().setFlags(WindowManager.LayoutParams
.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.main);
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
30
b1.setOnClickListener(new OnClickListener() {
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
60
b3.setOnClickListener(new OnClickListener() {
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
90
b5.setOnClickListener(new OnClickListener() {
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
120
b7.setOnClickListener(new OnClickListener() {
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
165
b0.setOnClickListener(new OnClickListener() {
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
199
200
b_ke_desimal.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
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
249
250
251
alertDialog.setMessage("Bilangan biner adalah salah satu
sistem bilangan yang digunakan pada komputer. " +
"Berbeda dengan sistem bilangan desimal yang
sering kita gunakan sehari-hari, " +
"sistem bilangan biner hanya menggunakan dua
bilangan yaitu 0 (nol) dan 1 (satu). " +
"\n\nSalam, Gede
Lumbung\nhttp://gedelumbung.com");
252
alertDialog.setButton("#OKOK", new DialogInterface.OnClickL
istener() {
253
254
@Override
public void onClick(DialogInterface dialog, int which)
{
255
dialog.dismiss();
256
}
257
});
258
alertDialog.show();
259
return true;
260
case R.id.keluar:
26
1
Intent exit = new Intent(Intent.ACTION_MAIN);
26
exit.addCategory(Intent.CATEGORY_HOME);exit.setFlags(Intent
2 .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);
getWindow().setFlags(WindowManager.LayoutParams
.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
10
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
22
b1.setOnClickListener(new OnClickListener() {
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
101
return hasil_akhir;
}
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
116
117
118
119
alertDialog.setMessage("Bilangan biner adalah salah satu
sistem bilangan yang digunakan pada komputer. " +
"Berbeda dengan sistem bilangan desimal yang
sering kita gunakan sehari-hari, " +
"sistem bilangan biner hanya menggunakan dua
bilangan yaitu 0 (nol) dan 1 (satu). " +
"\n\nSalam, Gede
Lumbung\nhttp://gedelumbung.com");
alertDialog.setButton("#OKOK", new DialogInterface.OnClickL
istener() {
120
121
@Override
public void onClick(DialogInterface dialog, int which)
{
122
dialog.dismiss();
123
}
124
});
125
alertDialog.show();
126
return true;
127
128
case R.id.keluar:
Intent exit = new Intent(Intent.ACTION_MAIN);
12
exit.addCategory(Intent.CATEGORY_HOME);exit.setFlags(Intent
9 .FLAG_ACTIVITY_NEW_TASK);
13
0
KalkulatorDesimalActivity.this.finish();
131
startActivity(exit);
132
return true;
133
134
default:
return super.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
folder menu/opt_menu.xml. Jadi total terdapat 3 buah layout.
main.xml
1
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
187
188
193
194
205
206
216
217
227
228
229
234
235
246
247
248
second.xml
1
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
103
104
109
110
120
121
131
132
133
138
139
150
151
152
opt_menu.xml
1
2
5
8
4. Yang terakhir, kita perlu mendaftarkan activity yang kedua di dalam file
AndroidManifest.xml.
1
2
6
7
8
9
10
12
15
16
17
18
19
20
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
18May
2012
KATEGORI : TUTORIAL ANDROID - Dibaca : 7974 kali
Ditulis oleh : Gede Lumbung
Ada 33 Komentar Seru
Tutorial Android : Cara Menggunakan AsyncTask di
Android
105-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 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.0 ke atas. Setelah
mencari masalahnya di logcat, 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 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 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 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.
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.