Modul Praktikum Pemgrograman Android

download Modul Praktikum Pemgrograman Android

of 182

Transcript of Modul Praktikum Pemgrograman Android

  • MODUL PRAKTIKUM

    MOBILE PROGRAMMING

    Oleh :

    PUJIANTO, S.Kom

    FAKULTAS TEKNOLOGI INFORMASI

    UNIVERSITAS BUDI LUHUR

    JAKARTA

    2012

  • i

    KATA PENGANTAR

    Assalamualaikum warahmatullahi wabarakatuh.

    Alhamdulillahirabbilalamin, banyak nikmat yang Allah berikan, tetapi sedikit

    sekali yang kita ingat. Segala puji hanya layak untuk Allah Tuhan seru sekalian

    alam atas segala berkat, rahmat, taufik, serta hidayah-Nya yang tiada terkira

    besarnya, sehingga penulis dapat menyelesaikan modul pembelajaran perkuliahan

    dengan judul MOBILE PROGRAMMING. Dalam penyusunannya, penulis

    memperoleh banyak bantuan dari berbagai pihak, karena itu penulis mengucapkan

    terima kasih yang sebesar-besarnya kepada: Kedua orang tua dan segenap

    keluarga besar penulis yang telah memberikan dukungan, kasih, dan kepercayaan

    yang begitu besar. Dari sanalah semua kesuksesan ini berawal, semoga semua ini

    bisa memberikan sedikit kebahagiaan dan menuntun pada langkah yang lebih baik

    lagi. Meskipun penulis berharap isi dari modul ini bebas dari kekurangan dan

    kesalahan, namun selalu ada yang kurang. Oleh karena itu, penulis mengharapkan

    kritik dan saran yang membangun agar skripsi ini dapat lebih baik lagi. Akhir kata

    penulis berharap agar makalah ini bermanfaat bagi semua pembaca.

    Jakarta, 12 Oct 2012

    Pujianto, S.Kom

  • PEMROGRAMAN ANDROID

    ii

    LEMBAR PENGESAHAN MODUL PRAKTIKUM

    FAKULTAS TEKNOLOGI INFORMASI

    UNIVERSITAS BUDI LUHUR

    Mata Kuliah : Pemrograman Android

    Penyusun : Pujianto, S.Kom

    Jakarta, tgl bln thn

    Dekan Ketua Program Studi

    Fakultas Teknologi Informasi Sistem Komputer

    (Goenawan Brotosaputro, S.Kom, M.Sc) (Irawan, S.Kom, M.Kom)

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    iii

    DAFTAR ISI

    Halaman

    KATA PENGANTAR ............................................................................................ ii

    UNIVERSITAS BUDI LUHUR ............................................................................. ii

    DAFTAR ISI .......................................................................................................... iii

    Pertemuan 1 ............................................................................................................. 1

    Dasar Pemrograman Android .................................................................................. 1

    Pertemuan 2 ........................................................................................................... 10

    APLIKASI PERTAMA : Hello World ................................................................. 10

    Pertemuan 3 ........................................................................................................... 22

    WIDGET ............................................................................................................... 22

    Pertemuan 4 ........................................................................................................... 39

    Dialog .................................................................................................................... 39

    Pertemuan 5 ........................................................................................................... 49

    Activity dan Intent................................................................................................. 49

    Pertemuan 6 ........................................................................................................... 59

    Layout Manager .................................................................................................... 59

    Pertemuan 7 ........................................................................................................... 73

    Action Bar ............................................................................................................. 73

    Pertemuan 8 ........................................................................................................... 80

    Ujian Tengah Semester ......................................................................................... 80

    Pertemuan 9 ........................................................................................................... 81

    Penyimpanan Data ................................................................................................ 81

    Pertemuan 10 ....................................................................................................... 101

    File ...................................................................................................................... 101

    Pertemuan 11 ....................................................................................................... 109

    Membuat Aplikasi Client Server Project ............................................................ 109

    Pertemuan 12 ....................................................................................................... 129

    Grafik 2D ............................................................................................................ 129

    Pertemuan 13 ....................................................................................................... 144

    Sensor .................................................................................................................. 144

    Pertemuan 14 ....................................................................................................... 160

    Google Map ......................................................................................................... 160

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    iv

    Pertemuan 15 ...................................................................................................... 169

    Sms Gateway ....................................................................................................... 169

    DAFTAR PUSTAKA ......................................................................................... 177

  • PEMROGRAMAN ANDROID

    1

    Pertemuan 1

    Dasar Pemrograman Android

    1. Dasar Pemrograman Android

    Membangun Aplikasi Android sangat mudah, default untuk bahasa

    pemrograman yang digunakan oleh Android adalah java. Tidak semua

    fitur java yang ada digunakan akan tetapi sebagian dari java yang sering

    disebut dengan Dalvik Virtual Machine. Beberapa bagian kecil dari

    Android:

    A. Activity

    Activity merupakan container untuk User Interface (UI). Sebuah

    Aplikasi Android terbangun dari satu atau beberapa Activity

    B. Intents

    Intent merupakan sistem pesan utama yang menjalankan Android.

    Intent terdiri dari Action yang harus dijalankan (Tampil, Ubah, Dial,

    dll) dan Data. Intent digunakan untuk memulai aktivitas dan

    komunikasi antar bagian dari sistem Android.

    Suatu aplikasi dapat mengirimkan atau menerima intent

    1) Mengirim Pesan dengan Intent

    Ketika suatu aplikasi mengirimkan suatu intent, aplikasi

    mengirimkan pesan memberitahukan Android untuk menjalankan

    sesuatu. Misal: memberitahukan Android untuk menjalankan suatu

    Activity dari aplikasi atau menjalankan aplikasi lain.

    2) Mendaftarkan Intent Receiver

    Mengirimkan pesan dengan Intent bukan berarti sesuatu

    selanjutnya akan terjadi secara otomatis. Aplikasi harus

    mendaftarkan intent receiver yang memperhatikan intent dan

    memberitahukan Android apa yang harus dilakukan.

    C. Cursorless Controls

    Perangkat Android menggunakan jari pengguna sebagai input.

    D. Views dan Widgets

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    2

    View merupakan elemen dasar UI (User Interface). Beberapa

    contoh view antara lain: : (1) ContextMenu, (2) Menu, (3) View, (4)

    SurfaceView.

    Widgets adalah elemen UI yang lebih canggih. Merupakan control

    untuk interaksi antara sistem dengan pengguna. Beberapa contoh

    Widgets antara lain: (1) Button, (2) CheckBox, (3) DatePicker, (4)

    DigitalClock, (5) Gallery, (6) FrameLayout, (7) ImageView, (8)

    RelativeLayout, (9) PopupWindow.

    E. Asynchronous Calls

    Android memiliki sebuah class yang AsyncTask yang memungkin

    aplikasi menjalan beberapa operasi pada waktu yang bersamaan, tanpa

    harus mengatur bagaimana thread berjalan secara khusus. Network

    Communication (Internet), Media Processing, dan berbagai proses lain

    yang mengharuskan pengguna menunggu.

    F. Background Service

    Services merupakan aplikasi yang berjalan di belakang dan tidak

    terlalu penting memiliki UI.

    2. Fitur Perangkat Keras Android

    Perangkat Android memiliki beberapa fitur perangkat keras

    didalamnya, yang dapat dimanfaatkan developerdalam membangun

    aplikasi.

    A. Touchscreen

    Perangkat Android memiliki fitur layar sentuh (touchscreen)

    yang memberikan beberapa kemungkinanan bagi pengguna untuk

    berinteraksi dengan aplikasi dengan menggunakan jari. Pengguna

    dapat melakukan swipe, flip, drag, dan pinch untuk zoom.

    Android juga mendukung multitouch yang berarti keseluruhan

    layar dapat disentuh dengan satu atau lebih jari pada saat yang

    bersamaan.

    B. GPS

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    3

    Sistem operasi Android mendukung GPS yang memungkinkan

    developer untuk mengakses lokasi pengguna. Contoh aplikasi yang

    memanfaatkan GPS adalah Aplikasi Peta (Map) yang menunjukkan

    lokasi pengguna dan memberikan petunjuk untuk menuju suatu lokasi.

    C. Accelerometer

    Android mendukung Accelerometer, yaitu perangkat yang

    digunakan untuk mengukur percepatan. Accelerometer dapat

    memberitahukan apabila suatu Perangkat Android bergerak, atau

    terguncang, atau berbalik arah posisinya.

    D. SD Card

    Android memiliki fitur yang memungkinkan pengguna atau

    aplikasi untuk mengakses (menyimpan atau membuka) file pada SD

    Card. SD Cardmerupakan media penyimpanan medium yang

    digunakan Perangkat Android dan beberapa perangkat mobile lain

    non Android sebagai media penyimpanan.

    3. Fitur Perangkat Lunak Android

    Android memiliki banyak fitur perangkat lunak yang dapat

    digunakan oleh developer dalam mengembangkan aplikasi. Beberapa

    fitur populer yangakan dijabarkan disini.

    A. Internet

    Kemampuan akses internet pada Android memberikan banyak

    keunggulan. Berbagai informasi secara real-time dapat diperoleh

    dengan mudah dengan internet. Contoh, sebagai pengguna, dapat

    menggunakan internet untuk melihat jadwal pemutaran film

    bioskop, cuaca suatu area, jadwal penerbangan dan lainnya.

    Sebagai developer, dapat menggunakan internet untuk akses secara

    real-time kepada data, updatedata. Developer juga dapat

    menggunakan internet untuk menyimpan berbagai asset untuk

    kemudian digunakan suatu aplikasi, seperti dilakukan Pandoradan

    YouTube. Dengan internet dapat dibangun model aplikasi yang

    disebut client-server computing. Contoh lain, aplikasi peta,

    mengakses data peta dan GPS dari web server.

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    4

    B. Audio dan Video Support

    Sistem operasi Android memungkinkan developer menyertakan

    audio dan video dalam aplikasi dengan mudah. Berbagai standar

    format audio dan video didukung.

    C. Contact

    Android memungkinkan akses ke contacs yang tersimpan dapat

    Perangkat Android. Developer dapat menggunakan fitur ini untuk

    menampilkan contacts dalam cara baru yang berbeda. Hal lain yang

    dapat dilakukan adalah membangun aplikasi yang menggabungkan

    antara contacts dengan GPS, yang memberikan notifikasi kepada

    pengguna jika pengguna berada di dekat alamat satu contactyang ada.

    D. Security

    Android memungkinkan aplikasi untuk melakukan banyak hal.

    Akan tetapi Android juga menyiapkan mekanisme keamanan berupa

    permission berkaitan dengan beberapa tugas. Contoh: Download

    image dan menyimpannya di SD Card, maka harus disetujui

    terlebih dahulu permission untuk mengakses SD Card.

    E. Google APIs

    Sistem operasi Android memungkinkan dengan tidak terbatas

    membuat panggilan telepon, mengorganisasi contacts atau meng-

    install aplikasi. Developer dapat mengintegrasikan peta (map) ke

    dalam suatu aplikasi dengan menggunakan Maps API yang

    mengandung Map Widgets. Berbagai fitur dapat ditambahkan

    dengan Maps API, antara lain: (1) Menampilkan suatu lokasi di

    peta, (2) Mendapatkan panduan navigasi, (3) Komunikasi data

    antara aplikasi dengan clouds.

    4. Instalasi Eclipse

    Untuk membuat program android, ada beberapa program yang

    harus di instal Antara lain:

    A. Java JDK

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    5

    Untuk mendapatkan Java SDK terbaru, anda dapat mendownload

    di http://www.oracle.com/technetwork/java/javase/downloads/jdk7-

    downloads-1880260.html

    B. SDK ADT Bundle for Windows

    Download SDK ADT Bundle for Windows di

    http://developer.android.com/sdk/index.html. Setelah Download

    ekstrak file tersebut, seperti terlihat pada gambar dibawah ini.

    Didalam folder tersebut terdapat 2 folder :

    Untuk membuat project aplikasi android jalankan eclipse.exe

    terlebih daluhu yang ada dalam folder eclipse dengan cara double

    click.

    Akan tampil screen seperti dibawah ini :

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    6

    Lalu akan tampil Workspace Launcher, pilih folder yang berfungsi

    sebagai tempat project android.

    Tampilan Awal Eclipse terlihat seperti gambar di bawah ini :

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    7

    5. Mebuat Virtual Device Manager

    Buat virtual device terlebih dahulu sebelum menjalankan project

    android. Berikut ini cara-cara AVD (Android Virtual Device)

    A. Pilih Menu AVD

    B. Pilih New

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    8

    C. Setting konfigurasi seperti terlihat pada gambar, lalu Ok.

    D. Untuk menjalankan AVD, pilih AVD yang telah kita buat lalu Start

    E. Pilih Launch

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    9

    F. Tampilan Emulator Android akan muncul, tunggu beberapa waktu.

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    10

    Pertemuan 2

    APLIKASI PERTAMA : Hello World

    Latihan pertama yang akan kita pelajari adalah membuat aplikasi Hello

    World. Untuk memulai, jalankan Eclipse, pilih File New Android Application Project.

    Isi seperti gambar dibawah, jangan lupa ganti nama package. Package name harus

    unik, aturan yang biasa digunakan adalah menggunakan nama website organisasi

    anda (dalam urutan yang dibalik), ditambah dengan nama applikasi. Misalkan

    nama website organisasi anda adalah puji.com, maka nama package adalah:

    com.puji.namapp. Jika nama web organisasinya budiluhur.ac.id, maka nama

    packagenya: id.ac.budiluhur.puji.namaapp.

    Selanjutnya pilih next sampai untuk activity pilih New Android Applicatoin dan

    Next.

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    11

    Selanjutnya pilih next sampai untuk Configure Launcer Icon dan Next.

    Selanjutnya pilih next sampai untuk Create Activity Pilih Blank Activity dan

    Next.

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    12

    Terakhir Finish

    Sekarang coba kita lihat apa yang dihasilkan secara otomatis.

    Komponen user interface untuk app Android disimpan di direktori /res/layout

    dalam format XML. Dalam project ini secara otomatis dibuat activity_main.xml

    Pertama yang kita lihat adalah graphical layout berisi rendering layout dan

    fasilitas untuk mengedit layout. Lihat ke tab bagian bawah, pilih

    activity_main.xml untuk melihat format XML-nya. Komponen user interface

    dalam Android didefinisikan didalam XML. Jadi anda dapat mengubah elemen

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    13

    tampilan dengan dua cara: melalui graphical layout atau langsung mengedit file

    xml-nya.

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    14

    Sekarang coba buka source code. Lihat package explorer, buka src, package dan

    klik MainActivity.java

    Dapat dilihat file yang otomatis di bangkitkan ADT

    Jalankan project android dengan cara : klik kanan project HelloWorld->Run As-

    >Android Applicatoin

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    15

    Selamat! Anda telah menjalankan app pertama anda. Jangan tutup emulator ini,

    Eclipse selanjutnya akan menggunakan emulator yang sudah terbuka ini sehingga

    tidak perlu menjalankan yang baru.

    Memodifikasi Project HelloWorld

    Selanjutnya kita akan memodifikasi program ini dan menambahkan masukan

    nama dari user, lalu setelah user menekan tombol, akan keluar Hello, [nama]. Terimakasih

    Pertama, melalui project explorer kembali pilih activity_main.xml yang berada di

    res/layout (gambar bawah).

    Pilih tab Graphical Layout

    Komponen-komponen user interface yang berada di bagian kiri, sering disebut

    widget atau view.

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    16

    Pertama pilih widget TextField, pilih yang paling atas (plain text), lalu drag ke

    dalam form.

    Lalu drag button di Form Widget, dan letakkan disebelah kanan text field.

    Terakhir, drag teks hello world dari tengah ke dekat button. Jika posisi menjadi berantakan jangan khawatir, atur ulang sehingga posisinya seperti dibawah.

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    17

    Coba run untuk melihat hasil tampilan dari program ini. Jangan lupa, jangan

    tutup emulatornya, supaya tidak menunggu lama saat run berikutnya. Sekarang

    kita akan menambahkan aksi yang akan dijalankan saat button diklik.

    Sekarang karena kita akan membuat code yang saat button di-klik menangkap apa

    yang diketikkan pengguna dan menuliskannya di TextView. Untuk itu setiap

    komponen perlu diberi nama.

    Kembali ke activity_main.xml. Klik Button kemudian lihat window properties

    yang berada di sebelah kanan, ganti Text dengan OK dan id dengan buttonOk

    Gambar untuk setting id Gambar untuk setting text

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    18

    Lakukan hal yang sama untuk textfield, ganti id dengan txtNama

    dan textview, ganti id dengan viewNama.

    Coba lihat XML-nya, maka semua Id telah diganti (gambar bawah). Ini kelebihan

    mengganti nama id menggunakan property.

    Tip: untuk merapikan XML tekan ctrl-shift-F.

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    19

    Sekarang kita akan mengeset agar saat button diklik, method yang diinginkan

    akan dipanggil. Set atribut android.onClik pada button dengan nama method yang

    akan menangani event tersebut (actionTampil).

    Penting: setelah update XML, tekan save (ctrl-s). Ini disebabkan file R.java

    (di direktori /gen) yang berisi semua Id dan digenerate secara otomatis dapat tidak

    terupdate jika file xml tidak di-save secara eksplisit.

    Sekarang kita perlu menambahkan code agar saat tombol diklik app akan

    mengeluarkan respon.

    Melalui package explorer, kembali ke activity utama (MainActivity.java).

    Kemudian buat satu method baru actionTampil. Pastikan nama method sama dengan yang dicantumkan di activity_main.XML. Nama yang

    tidak sama akan menyebakan error saat program dijalankan

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    20

    Jalankan program, perhatikan tab Console di bagian bawah untuk memonitor

    proses emulasi. Isi teks dan tekan tombol.

    Cara ini paling sederhana, tetapi programmer harus memastikan nama

    method pada XML sama dengan nama method di program. Jika nama method

    tidak sama, tidak akan muncul kesalahan pada saat program dicompile, tapi akan

    menyebabkan kesalahan pada saat runtime (saat button diklik). Alternatif lain

    adalah dengan menggunakan listener seperti code dibawah

    Mana yang lebih baik? menggunakan atribut onClik atau dengan listener? itu

    tergantung dari selera programmer dan standard code yang digunakan.

    Tip: Jika id tidak dikenali seperti R.id.txtNama, R.id.viewNama dan

    seterusnya, buka kembali activity_main.xml lalu tekan ctrl-S (save)

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    21

    Latihan:

    Buatlah program untuk menghitung luas sebuah persegi panjang. Input adalah

    panjang dan lebar (dua edit text). Output adalah luasnya (panjang kali lebar).

    Gunakan method berikut untuk mengubah tipe string ke double.

    Catatan: input dari method setText bertipe teks, sehingga nilai luas yang bertipe

    double harus dikonversi terlebih dulu menjadi teks. Gunakan

    String.valueOf(dblLuas) untuk mengkoversi double menjadi teks.

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    22

    Pertemuan 3

    WIDGET

    Pada modul sebelumnya kita telah menggunakan input box, button dan

    label. Komponen user interface ini disebut widget. Beberapa widget dasar adalah:

    TextView, Button, Image, EditText, CheckBox, RadioButton, ListView.

    Setiap widget memiliki property atau atribut yang mengatur bagaimana

    widget itu ditampilkan, seperti tinggi dan lebar widget. Property ini dapat diset

    melalui xml layout, property editor atau melalui program. Beberapa widget

    memiliki beberapa event yang ter-trigger berdasarkan aksi dari pengguna,

    misalnya event click pada button.

    Detil property dan event untuk setiap widget dapat dilihat di:

    http://developer.android.com/reference/android/widget/package-summary.html

    (scroll sedikit ke bawah, di bagian classes)

    Berikut akan kita bahas beberapa widget yang terpenting. Silahkan buat project

    baru.

    A. Text View

    TextView digunakan untuk menampilkan label teks. View ini sudah kita

    gunakan Beberapa contoh property dari TextView adalah android:textSize,

    android:textStyle, android:textColor. Coba tambahkan textview standard

    dengan atribut dibawah.

    Hasil :

    Catatan: pada atribut textSize, direkomendasikan menggunakan ukuran sp.

    sp merupakan singkatan dari scaled-pixel yang memperhitungkan

    kepadatan resolusi dan juga preferensi ukuran font dari pengguna.

    B. Button

    Button merupakan turunan dari TextView sehingga yang berlaku di

    textView juga berlaku di button. Tambahan property yang penting adalah

    onClick

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    23

    Hasil :

    C. ImageButton dan ImageView

    ImageButton adalah turunan dari button, gunakan widget ini jika Anda

    ingin menggunakan image sebagai pengganti tulisan pada button.

    Sedangkan ImageView dapat digunakan untuk menampilkan image.

    Image yang akan ditampilkan dalam button diletakkan di direktori /res

    sesuai dengan resolusinya

    /[project]/res/drawable-ldpi

    /[project]/res/drawable-mdpi

    /[project]/res/drawable-hdpi

    /[project]/res/drawable-xhdpi

    /[project]/res/drawable-xxhdpi

    res merupakan singkatan dari resource, file-file yang berada di dalam

    direktori /res disebut dengan project resources.

    ldpi digunakan untuk untuk device dengan layar low density atau resolusi

    rendah 120dpi (dot per inch), mdpi untuk medium (160dpi) , hdpi untuk

    high density (240dpi) dan xhdpi untuk ekstra high density (320dpi).

    Sedangkan xxhdpi untuk resolusi 480dpi. Saat ini sudah jarang device

    dengan resolusi ldpi.

    Coba buka direktori tersebut, terdapat icon launcher untuk masing-masing

    resolusi (ic-launcher.png), dapat dilihat ukuran yang berbeda untuk setiap

    resolusi. Jadi untuk hasil yang maksimal, untuk setiap image yang akan

    anda gunakan harus disediakan 4 image untuk setiap resolusi (mdpi sampai

    dengan xxhdpi). Hal ini untuk mencegah gambar yang digunakan terlihat

    pecah atau terlalu kecil pada device dengan resolusi berbeda.

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    24

    Misalnya kita akan menambah button dan image view. Sebagai sumber

    gambar kita akan menggunakan icon standard yang sudah ada direktori

    drawable. Di window palette, pilih images & media lalu Image View

    (paling kiri)

    Pilih ic_launcher

    Coba lakukan yang sama untuk widget Image Button sehingga

    tampilannya akan seperti ini

    Coba jalankan dan klik terutama untuk button-nya.

    Untuk menambahkan image bersama-sama dengan teks pada button, dapat

    digunakan komponen button (bukan ImageButton) lalu set atribut

    drawableLeft dengan image yang diinginkan.

    Coba tambah button, dan isi drawableLeft.

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    25

    Hasilnya :

    Coba ganti drawableLeft dengan drawableRight, drawableTop atau

    drawableButtom.

    D. EditText

    EditText digunakan untuk menerima input dari pengguna. Pada palette

    telah disediakan berbagai jenis EditText, silahkan dicoba satu persatu dan

    perhatikan XML yang dihasilkan.

    E. Spinner

    Spinner digunakan untuk menampilkan pilihan seperti combo box. Pada

    palette telah disediakan, silahkan dicoba dan perhatikan XML yang

    dihasilkan.

    Buat spinner id diganti dengan spinnerAgama. Tambahkan code program

    pada MainActivity.java seperti gambar di bawah ini

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    26

    Hasil :

    F. CheckBox

    User dapat memilih lebih dari satu pilihan dengan checkbox. Pada palette,

    Checkbox ada di bagian FormWidgets.

    Coba tambahkan dua checkboxs lalu set atribut id dan text melalui window

    property. Tambahkan Button dan TextView di form untuk menampilkan

    hasil pilihan user. Sehingga tampilannya akan seperti ini.

    Sedangkan XML-nya akan seperti ini, anda dapat langsung mengedit file

    XML ataupun melalui window property. Jangan lupa atribut onClick:

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    27

    Tambahkan di activity code method actoinHasil sebagai berikut,

    perhatikan penggunaan isChecked untuk mengambil nilai apakah user

    meng-check pilihan:

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    28

    G. RadioButton

    Pada radioButton, hanya satu pilihan yang boleh aktif (mutual exclusive) di

    dalam satu group yang disebut radioGroup. Modifikasi program checkbox

    diatas, tambahkan radio group (bukan radiobutton) yang ada di Form

    Widget

    Hasilnya:

    Tambahkan button dan textview, lalu gunakan property untuk mengedit

    sehingga hasilnya seperti berikut. Ganti id RadioGroup dengan rgJenisKel,

    radiobutton dengan rbLaki dan rbPerempuan dan id TextView dengan

    Latihan CheckBox:

    Buat soal berikut yang penggunanya dapat memilih lebih dari satu:

    --------------------------------------------------------------------------------

    1. Manakah kota dibawah ini yang merupakan ibu kota propinsi?

    Bandung

    Bogor

    Banjarmasin

    Bontang

    Nilai anda: [ditampilkan setelah tombol periksa nilai diklik]

    --------------------------------------------------------------------------------

    Jawaban yang benar adalah Bandung dan Banjarmasin. Setiap jawaban benar bernilai 10, tetapi setiap jawaban yang salah akan dikurangi 5. Jadi jika

    pengguna menjawab Bandung, Bogor dan Banjarmasin dan maka pengguna mendapat nilai 20 5 = 15. Tampilkan nilai ini.

    Catatan: input dari method setText adalah teks, sehingga nilai integer harus

    dikonversi terlebih dulu menjadi teks. Gunakan Integer.toString(intNilai).

    Periksa Nilai

    ini button

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    29

    tvHasilRadio. Tambahkan property onClick pada button dengan nama

    klikHasilRadio

    Sedangkan code saat tombol diklik adalah sebagai berikut.Perhatikan

    pengunaan getCheckRadioButtonId yang mengambil idRadio yang dipilih

    oleh pengguna:

    Catatan: Anda dapat mengeset atribut android:orientation pada RadioGroup

    menjadi horizontal agar radio button tersusun secara mendatar.

    Latihan:

    Buat soal berikut yang penggunanya hanya dapat memilih tepat satu:

    --------------------------------------------------------------------------------

    1. Sebutkan ibu kota propinsi Sulawesi Tenggara?

    Samarinda

    Kendari

    Palu

    Makasar

    Nilai anda: [ditampilkan setelah tombol periksa nilai diklik]

    --------------------------------------------------------------------------------

    Jawaban yang benar adalah Kendari. Jika pengguna memilih pilihan yang benar akan mendapat nilai 10, sedangkan jika menjawab salah maka akan

    mendapat nilai -2

    Periksa Nilai

    ini button

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    30

    H. ListView

    List view adalah widget untuk menampilkan data dalam bentuk list yang

    dapat di-scroll. Karena ukuran layar smartphone terbatas, listview

    merupakan salah satu widget terpenting dan paling sering digunakan untuk

    menampilkan kelompok informasi.

    ListView dapat berbentuk sederhana sampai kompleks. Beberapa contoh

    Kita akan mulai dengan membuat list sederhana seperti gambar di bawah:

    Pertama, buat project baru lalu pilih Composite dan tambahkan ListView

    diactivity_main.xml

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    31

    Ganti id list view dengan listAngka

    Di activity utama MainActivity.java, tambahkan code sebagai berikut:

    Coba jalankan.

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    32

    Pada code di atas, dibuat adapter berisi string untuk mengisi list.

    Sedangkan R.layout.simple_expandable_list_item1 adalah layout standard

    yang disediakan Android.

    Bagaimana mengupdate isi listview saat program sedang berjalan?

    Untuk mengupdate data pada contoh diatas, nilai array dapat langsung

    diubah lalu panggil method adapter.notifyDataSetChanged()untuk

    merefresh tampilan. Sebagai contoh, kita akan membuat button yang saat

    diklik akan mengubah item pertama:

    Tambahkan button diatas listview

    Tambahkan event onClick bernama actionButton dan kode pada

    MainActivity.java seperti berikut:

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    33

    I. Composite ListView

    Listview juga dapat digunakan untuk menampilkan struktur yang

    lebih rumit. Contoh berikut memperlihatkan listview dengan isi yang kita

    tentukan sendiri.

    Untuk membuatnya, pertama buat project baru. Tambahkan

    ListView seperti pada contoh sebelumnya. Ganti id dengan listJudul.

    Kemudian kita akan buat layout untuk setiap baris pada ListView

    yang berisi judul dan keterangan. Pilih project pada project explorer, lalu

    klik kanan Android Tools New Resources File

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    34

    Catatan: alternatif lain membuat layout XML, klik kanan project new Android XML File.

    Pilih resource type Layout. Beri nama file row.xml, pilih root

    element LinearLayout, XML akan dibuat di dalam direktori /res/layout.

    File row.xml ini akan menentukan layout dari setiap baris pada listview.

    Pada row.xml yang baru digenerate tambahkan widget LargeText

    dan TextView (gambar bawah). Ganti Id kedua komponen itu.

    LargeText dengan tvJudul dan TextView dengan tvKeterangan.

    Pada contoh di atas hanya digunakan dua widget (LargeText dan

    TextView), tapi sebenarnya apapun dapat dimasukkan di dalam layout ini.

    Misalnya Button, ImageView dan lainnya. Ini memungkinkan kita

    membuat ListView dengan isi yang kompleks.

    Sekarang buat class untuk yang menampung data judul dan

    keterangan. Pada project explorer, pilih /src/[package], klik kanan new Class

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    35

    Beri nama DataList

    Berikut isi dari DataList. Class ini akan berisi data yang akan

    muncul di setiap baris.

    Selanjutnya kita akan buat adapter untuk list. Fungsinya untuk

    mengisi setiap row dengan isi objek DataList.

    Buat class dengan cara yang sama dengan sebelumnya (klik

    /src/[package], klik kanan, new class), beri nama DataAdapter, jadikan

    class ini turunan dari kelas ArrayAdapter.

    Klik browse di dialog saat membuat class di bagian superclass

    (gambar bawahh)

    Ketik Array, maka akan muncul ArrayAdapter, pilih item

    tersebut (gambar bawah)

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    36

    Isi class DataAdapter adalah sebagai berikut. Pada method

    getView, parameter pos adalah indeks baris. Perhatikan pengisian tvJudul

    dan tvKeterangan dengan data sesuai indeks.

    Terakhir, di activity utama (MainActivity.java) tambahkan kode

    berikut:

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    37

    Jika dijalankan, hasilnya akan seperti ini:

    Latihan:

    Buat program dengan tampilan seperti berikut, saat tombol diklik, maka isi list

    akan bertambah sesuai dengan nim dan nama. Tip: gunakan

    adapter.notifyDataSetChanged() untuk merefresh data.

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    38

    Pengangan Click pada List View

    Listview sering digunakan untuk menampilkan data master-

    detail yang jika di tap barisnya akan menampilkan detil pada layar

    terpisah. Listview juga dapat digunakan untuk menampilkan menu.

    Untuk menangani tap pada listview, gunakan method

    setOnItemClickListener

    Contoh berikut akan menampilkan dialog singkat jika baris

    ditekan, judul pada baris juga akan berubah menjadi warna merah.

    Berdasarkan kode pada contoh listview sebelumnya, tambahkan kode

    berikut (bagian yang dilingkari). Penjelasan tentang Toast ada di sub bab

    berikutnya.

    Hasilnya :

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    39

    Pertemuan 4

    Dialog

    A. DIALOG

    Seringkali app perlu menyampaikan pesan sementara kepada

    pengguna, misalnya jika menampilkan informasi, melaporkan kesalahan

    atau memperlihatkan proses yang memakan waktu lama.

    B. TOAST

    Toast digunakan untuk menampilkan pesan yang kemudian akan

    menghilang dengan sendirinya tanpa interaksi dengan pengguna. Fokus

    juga tetap pada aplikasi dan tidak berpindah ke Toast. Kelebihan Toast

    adalah mudah untuk dibuat, sedangkan kelemahannya adalah pengguna

    dapat saja tidak melihat pesan yang dikandung Toast.

    Untuk mencobanya, buat project baru, tambahkan satu button, beri

    label Toast

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    40

    dan kode berikut pada activity_main.xml:

    dan kode berikut pada MainActivity.java:

    C. ALERT DIALOG

    Jika yang diinginkan adalah dialog yang muncul dan harus ditutup

    secara manual oleh pengguna maka dapat digunakan AlertDialog.

    AlertDialog dapat menampilkan tiga button.

    Tambahkan button pada program sebelumnya, beri label

    AlertDialog. Tambahkan code berikut untuk event onClick.

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    41

    dan kode berikut pada MainActivity.java:

    Hasilnya dapat dilihat dibawah ini:

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    42

    Selain setMessage dan setPositiveButton, dapat digunakan method

    setTitle, setIcon untuk mengeset judul dan icon message dan

    SetNeutralButton (button tengah) dan SetNegativeButton. Berikut

    contohnya . Ubah code program pada actionAlert

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    43

    Hasil :

    Di dalam Dialog kita juga bisa menambahkan widget. Tambahkan

    button pada program sebelumnya, beri label WidgetDialog. Tambahkan

    code berikut untuk event onClick.

    Tambahkan code berikut ini pada MainActivity.java

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    44

    public void actionWidget(View v) { LinearLayout linearLayout = new LinearLayout(this); linearLayout.setOrientation(LinearLayout.VERTICAL); final RadioGroup rg = new RadioGroup(this); final RadioButton rbPria = new RadioButton(this); rbPria.setText("Pria"); final RadioButton rbWanita = new RadioButton(this); rbWanita.setText("Wanita"); rg.addView(rbPria, 0); rg.addView(rbWanita, 1); linearLayout.addView(rg); AlertDialog.Builder builder = new AlertDialog.Builder(this) .setTitle("ALERT WIDGET") .setView(linearLayout) .setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { // TODO Auto-generated method stub if(rbPria.isChecked()){ Toast.makeText(getApplicationContext(), "Pria", Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(getApplicationContext(), "Wanita", Toast.LENGTH_SHORT).show(); } } }) .setNeutralButton("CANCEL", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { // TODO Auto-generated method stub arg0.cancel(); } }); AlertDialog alert = builder.create(); alert.show();

    }

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    45

    Hasilnya:

    Apabila kita pilih Pria lalu tombol OK di klik maka akan mucul

    Kita bias menambahkan widget yang lain yang kita inginkan

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    46

    Latihan:

    Buat program dengan tampilan seperti berikut apabila saat tombol button diklik,

    maka akan tampil AlertDialog seperti gambar dibawah ini. Jika di tekan tombol

    OK maka akan menampilkan dialog yang sesuia apa yang di inputkan. Jika di tekan tombol CANCEL maka akan kembali. Tip : Unutk menampilkan agama gunakan Spinner

    Hasilnya

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    47

    Logging

    Fitur logging digunakan untuk memberikan keterangan apa yang sedang terjadi

    pada app. Manfaat utama fitur ini adalah untuk mendebug app.

    Sebagai contoh, buka project yang pernah anda buat sebelumnya. Lalu pada

    bagian MainActivity onCreate tambahkan log sebagai berikut. yw adalah tag dan dapat diganti dengan string apapun.

    Buka tab logcat dan jalankan program

    Terlihat banyak message di dalam logcat, untuk memfilternya sesuai dengan tag

    yang kita tentukan sebelumnya, tambahkan filter (gambar bawah). Nama filter

    dapat diisi bebas.

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    48

    Fitur filter yang lain adalah memfilter berdasarkan jenis lognya (verbose sampai

    dengan error), terutama untuk jenis error.

    Pada contoh diatas kita menggunakan Log.i (info), selain itu dapat digunakan

    method Log.v(), Log.d(), log.w() dan Log.e() untuk verbose, debug, warn dan

    error.

    Tips: untuk tag, dianjurkan menggunakan variabel yang ditempelkan di class

    activity (code dibawah)

    public class MainActivity extends Activity {

    private static final String TAG = "MainActivity";

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    Log.i(TAG,"program dimulai");

    }

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    49

    Pertemuan 5

    Activity dan Intent

    Dalam materi sebelumnya, selalu digunakan satu activity. Tentu saja

    sebuah applikasi sering membutuhkan lebih dari satu activity. Activity adalah

    komponen terkecil penyusun Android App yang berisi satu kegiatan yang dapat

    dilakukan oleh pengguna.

    Untuk menghubungkan antar activity dapat digunakan intent. Intent adalah

    fasilitas untuk menghubungkan satu activity ke activity yang lain, baik untuk app

    yang sama maupun app yang berbeda. Intent juga digunakan untuk notifikasi

    event misalnya SD card dimasukkan, SMS masuk dan lain-lain.

    Untuk lebih memahami activity dan intent, sekarang coba buka salah satu app

    android yang telah dibuat sebelumnya, lalu pada project explorer pilih

    AndroidManifest.xml. File XML ini berisi property aplikasi, termasuk di

    dalamnya activity dan intent

    Klik xml-nya dibagian bawah

    Lihat tag activity, dapat dilihat ada satu activity dengan property nama dan label.

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    50

    Selain itu ada tag intent-filter yang digunakan untuk memfilter intent yang dapat

    dihandle activity. android.intent.categori.LAUNCHER menyatakan activity ini

    adalah initial activity yang dapat dipanggil langsung oleh launcher sedangkan

    intent.action.MAIN menyatakan activity ini adalah initial activity tanpa data input

    dan tidak menghasilkan output.

    Sekarang kita akan membuat contoh app yang memiliki dua activity.

    Pertama buat project baru. Kemudian langsung buat activity kedua, caranya buat

    class baru: di project explorer klik package, klik kanan New Class. Beri nama class ini ActivityDua dan pastikan superclass kelas ini adalah

    android.app.Activity (gambar bawah)

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    51

    Sekarang kita perlu menambahkan activity ini di AndroidManifest.xml. Isi atribut

    name dengan nama class lengkap dengan nama package dan label.

    Penting: Tanpa menambahkan activity ke dalam AndroidManifest.xml, akan

    terjadi force close saat program dijalankan.

    Setelah klik Browse tunggu sehingga muncul dua activity seperti pada gambar

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    52

    Setelah itu jangan lupa di save (Ctrl+S). Dapat dilihat hasilnya pada

    AndroidManifest.xml

    Sekarang kembali ke activity utama (MainActivity), tambahkan button di

    activity_main.xml, isi atribut onClick dengan clickButton. Buat implementasi

    method clickButton sebagai berikut, perhatikan pengunaan class Intent:

    Dari kode diatas dapat dilihat bahwa intent merupakan struktur data (objek) yang

    dilempar sebagai paramater ke method startActivity.

    Jika program dijalankan hasilnya akan seperti ini. Terlihat label pada ActivityDua

    yang disimpan di dalam AndroidManifest.xml akan menjadi title.

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    53

    Terlihat ActivityDua masih polos tanpa layout. Sekarang kita akan membuat

    layout untuk activity tersebut. Ini mirip saat membuat layout baris pada ListView.

    Untuk membuat file layout, pilih project di project explorer, klik kanan,

    AndroidTools New Resources File. Pilih resource type Layout. Beri nama file activity_dua.xml, pilih root element LinearLayout (gambar bawah)

    Tambahkan widget Large Text ke dalam layout, beri id tvDua dan save.

    Sekarang kita perlu meload layout ini saat activity kedua dijalankan. Buka class

    ActivityDua dan tambahkan kode dibawah dan coba jalankan.

    Pertukaran Data antar Activity

    Pada contoh sebelumnya, activity kedua dipanggil tanpa ada data yang dikirimkan

    dari activity utama ke maupun data kembali. Sekarang kita akan belajar

    bagaimana cara mengirim dan menerima data antar activity.

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    54

    Mengirimkan data ke activity

    Kita akan memodifikasi contoh pada app sebelumnya (app dengan dua activity).

    Pada MainActivity, ubah kode sebagai berikut, perhatikan method putExtra untuk

    menambahkan data yang akan dikirim.

    Sedangakan di ActivityDua tambah kode sebagai berikut untuk menerima data.

    Method onStart ini akan otomatis dipanggil saat activity mulai dijalankan setelah

    onCreate. Coba jalankan kembali app ini.

    Menerima data dari actvity yang dipanggil

    Untuk mengirimkan dan menerima data dari activity, dapat digunakan method

    startActivityForResult.

    Sebagai contoh, kita akan membuat activity yang memanggil activity lain,

    pengguna mengisi data pada activity tersebut dan mengirimkannya kembali ke

    activity utama. Kita akan memodifikasi program sebelumnya.

    Catatan: jika anda mau program sebelumnya tidak hilang anda dapat menduplikasi

    project dengan mencopy-paste project tersebut pada package explorer.

    Sekarang kita kembali ke activity utama MainActivity, gunakan method putExtra

    untuk menambahkan data ke intent. Pada startActivityForResult terdapat

    parameter angka 99 (silahkan ganti dengan angka atau konstanta apapun).

    Paremeter ini diperlukan karena satu activity bisa mengirimkan banyak intent dan

    diperlukan cara untuk membedakan antara satu intent dengan intent yang lain.

    Method onActivityResult akan dipanggil saat activity yang dipanggil telah selesai.

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    55

    Selanjutnya kita akan menambahkan widget editText pada activity dua yang dapat

    diedit oleh pengguna dan hasilnya akan dikirimkan kembali ke activity utama.

    Buka res/layout/activity_dua.xml. Tambakan satu editText dan satu button. Beri

    nama etNama dan tambahkan android:onClick="clickButtonActDua" di button.

    Sekarang kita akan membuat kode di activitydua yang akan mengisi editText

    dengan data yang dikirim dari activity utama dan setelah button ditekan

    mengirimkan hasil update ke activity utama. Buka file ActivityDua.java dan

    tambahkan kode berikut:

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    56

    Jika dijalankan hasilnya sebagai berikut

    Latihan Activity-Intent

    Menggunakan listview (layar1), tampilkan daftar nama mahasiswa. Pengguna

    dapat men-tap nama (baris), dan kemudian app akan menampilkan informasi

    yang lebih detil berisi NIM, NAMA, ALAMAT dan NOHP (layar2). Pada layar

    informasi detil (layar2) tersebut ada button EDIT yang jika diklik akan membawa ke layar ketiga yang berisi editText untuk mengupdate data. Hasil

    update akan muncul baik di layar1 dan layar2

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    57

    Activity Life Cycle

    Pada contoh sebelumnya, kita telah menggunakan lebih dari satu activity. Setiap

    activity memiliki siklus seperti gambar dibawah. Saat pertama kali dijalankan

    activty akan berada dalam status active. Ketika user pindah app atau menjalankan

    activity lain maka status dapat berubah menjadi paused atau stopped. Setelah itu

    app bisa kembali active (user membuka kembali) atau di-destroy oleh Android

    (memori habis).

    Kita dapat menangani setiap fase dari activity. Ini berguna misalnya untuk app

    game, pada saat activity berubah dari active menjadi paused, maka game juga

    harus otomatis dipaused dan jika activity di-kill oleh Android, maka state game

    perlu disimpan dan dikembalikan. Demikian juga untuk app yang menggunakan

    sensor, koneksi dengan sensor perlu dilepaskan saat app di-pause atau distop.

    Saat activity di-pause, maka akan dipanggil onPause(). Ini artinya activity masih

    terlihat walaupun cuma sebagian. Isi dari onPause tidak boleh terlalu berat, seperti

    menulis ke database karena akan memperlambat proses transisi ke activity lain.

    Umumnya onPause digunakan untuk tiga hal: menstop animasi atau aktivitas yang

    menggunakan banyak CPU; commit input dari user (misalnya draft email);

    melepaskan system resources seperti sensor atau kamera.

    Saat activity berubah dari pause menjadi stop, maka akan dipanggil onStop().

    Pada method ini dapat dilakukan komputasi yang kompleks untuk menyimpan

    state. Pada saat kondisi stop, activity sama sekali tidak muncul di layar dan fokus

    sudah berada di app lain.

    Jika app kembali aktif, maka akan dipanggil onResume(). Pada method ini

    lakukan proses untuk mengembalikan kondisi app seperti semula (kebalikan dari

    onStop). Selain onResume, untuk state stop ada event lain yang terlibat yaitu

    onRestart. Hubungan keduanya dapat dilihat pada gambar bawah

    Active/Running

    Paused

    Stopped Destroyed

    hilang fokus tapi masih visible

    sistem kekurangan memori

    sistem kekurangan memori

    tidak visible

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    58

    diambil dari: http://developer.android.com/training/basics/activity-

    lifecycle/stopping.html

    Dari gambar diatas, dapat dilihat urutan pada dari state stop menuju resumed

    urutannya adalah OnRestart() onStart() onResume()

    Contoh penggunaan onPause() dan onResume() dapat dilihat pada subbab

    mengenai sensor.

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    59

    Pertemuan 6

    Layout Manager

    . Untuk meletakan komponen (view) pada layar, android menggunakan

    layout manager. Karena ukuran layar device Android sangat beragam, tidak ada

    peletakan posisi widget secara eksak per pixel.

    Terdapat empat jenis layout manager yang memiliki fungsi masing-masing.

    LinearLayout, TableLayout, RelativeLayout dan FrameLayout. Berikut akan

    dibahas lebih rinci untuk setiap layout.

    A. Relative Layout

    RelativeLayout mengatur posisi secara relatif berdasarkan posisi widget

    yang lain atau parentnya. Sebagai contoh, dua widget pada gambar di

    bawah. EditText posisinya relatif terhadap textView nama.

    Contoh deklarasinya adalah sebagai berikut:

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    60

    Untuk layout_width dan layout_height ada dua pilihan: match_parent

    (view berusaha sebesar parent) dan wrap_content (view hanya berusaha

    sebesar content yang berada di dalamnya). Sedangkan padding

    menyatakan jarak antara pinggir layar dengan komponen.

    Perhatikan penggunaan atribut layout_toRightOf yang menyatakan bahwa

    EditText berada disebelah kanan label. Sedangkan atribut

    layout_baseLine digunakan agar TextView dan EditText aligned. Jika

    layout_baseLine dihapus efeknya akan sebagai berikut (Text View terlalu

    tinggi posisinya):

    Beberapa atribut lain yang mengatur posisi widget dibandingkan dengan

    widget lain adalah:

    android:layout_above

    android:layout_below

    android:layout_toLeftOf

    android:layout_toRightOf.

    Untuk mengatur posisi ada tambahan lima atribut: android:

    layout_alignTop, android:layout_alignBottom, android:layout_alignLeft,

    android:layout_alignBaseline

    Contoh jika kita ingin menambahkan button sehingga posisinya sebagai

    berikut:

    Maka deklarasi buttonnya adalah sebagai berikut:

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    61

    Artinya button tersebut dibawah dan disebelah kanan EditText.

    Widget juga dapat diatur berdasarkan gravity android:layout_gravity ada

    beberapa pilihan untuk gravity ini: left, right, center_horizontal,

    center_vertical, bottom, top. Gravity ini juga berlaku untuk layout

    manager yang lain. Berikut adalah contohnya:

    Hasilnya:

    Silahkan bereksperimen dengan berbagai setting atribut layout.

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    62

    B. Table Layout

    Untuk memilih layout manager, selain dengan cara manual dapat juga

    ditentukan membuat layout (File New Other Android XML Layout File). Saat muncul dialog berikut, pilih Root Element sebagai

    TableLayout.

    Buatlah project :

    TableLayout meletakan komponen dalam bentuk tabel (baris dan kolom),

    mirip seperti Table yang digunakan di HTML. Pengguna mendefinisikan

    baris dengan tag dan sistem secara otomatis mendefinisikan

    kolomnya. Contoh deklarasi berikut:

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    63

    Gantir New Layout Type dengan TableLayout

    Ubahlah file activity_main.xml seperti gambar di bawah ini

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    64

    Hasilnya adalah sebagai berikut. Bayangkan sebagai sebuah tabel dengan

    dua kolom dan dua baris.

    Misalnya kita ingin agar EditText sampai ke bagian belakang, maka

    tambahkan android:stretchColumns="1" pada TableLayout. Maka kolom

    1 akan terisi penuh.

    Kolom 0 Kolom 1

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    65

    Hasilnya:

    Untuk menambahkan widget di kolom terntentu, gunakan

    aandroid:layout_column. Misalnya kita akan menambahkan TextView di

    kolom 1 (ingat kolom dimulai dari 0). Ini bisa dilakukan dengan

    menggunakan atribut android:layout_column. Tanpa atribut ini, TextView

    akan muncul di kolom 0

    Hasilnya sebagai berikut:

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    66

    C. Frame Layout

    Framelayout digunakan untuk menampilkan satu komponen dalam satu

    layar. Jika ada lebih dari satu widget, maka akan ditampilkan secara

    bertumpuk, walaupun posisi widget dapat diatur dengan gravity. Kita bisa

    menambahkan layout lain sebagai child di dalam frame layout.

    Contoh untuk deklarasi berikut menampilkan dua ImageView (pastikan

    file image telah disimpan di direktori [project]/res/drawable-hdpi,

    [project]/res/drawable-ldpi dan [project]/res/drawable-mdpi )

    Ubahlah layout dengan cara yang sama menjadi Framelayout dan

    kemudian Ubahlah file activity_main.xml seperti gambar di bawah ini

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    67

    Hasilnya gambar akan bertumpuk seperti ini

    D. LinearLayout

    Sesuai dengan namanya, linear layout menyimpan widget dalam satu baris

    atau satu kolom (tergantung orientasinya).

    Jika orientasinya vertical (android:orientation="vertical") maka hasilnya akan

    seperti ini

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    68

    Sedangkan jika orientasinya horizontal (android:orientation="horizontal"), maka

    hasilnya akan seperti ini.

    E. ScrollView

    Dengan scrollview, layout seolah-olah memiliki layar yang lebih luas.

    Pengguna dapat melakukan scroll. Scrollview hanya mempunyai satu child

    dan umumnya adalah LinearLayout. Scrollview hanya dapat melakukan

    vertical scrolling, gunakan HorizontalScrollView untuk layout yang dapat

    discroll secara horizontal.

    Jangan gunakan Listview bersama layout ini karena listview telah

    memiliki mekanisme scrolling tersendiri.

    Berikut adalah contoh scrollview yang menghasilkan layout seperti ini

    yang dapat discroll. Dua button teratas menggunakan RelativeLayout yang

    disisipkan dalam ScrollView. Ini adalah contoh penggabungan antara dua

    layout.

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    69

    Latihan Menggabungkan beberapa layout

    Ubahlah default layout RelativeLayout dengan ScrollView dengan cara yang

    pernah di ajarkan .

    Tambah kan layout LinearLayout(Vertical) didalam layout ScrollVew seperti

    pada gambar, dibawah ini

    Ganti layout_width = match_parent

    layout_height = wrap_content

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    70

    Kemudian Tambah kan RelativeLayout di dalam LinearLayout. Setelah itu

    tambahkan Widget dua buah Button di dalam Relative Layout. Dan tambahkan

    beberapa Widget Button di dalam LinearLayout. Seperti code di bawah ini

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    71

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    72

    android:text="Button" />

    Latihan Layout

    Berdasarkan hasil latihan activity-intent, pada layar2 dan layar3, tambahkan

    layout yang tepat agar tampilan widget rapi.

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    73

    Pertemuan 7

    Action Bar

    Actionbar adalah bar yang berada diatas activity yang mulai diperkenalkan

    sejak Android 3. Action bar memperlihatkan identitas berupa judul dan icon

    activity, tempat fitur-fitur utama (misalnya search, shared, create dsb), dan dapat

    digunakan untuk navigasi global.

    Beberapa contoh action bar:

    (sumber: 8)

    Untuk mengimplementasikan ActionBar pada Android dengan versi lebih kecil

    dari 3 dapat menggunakan library actionbarsherlock.com

    Dalam aplikasi sebelumnya, sebenarnya kita secara default selalu membuat

    ActionBar karena minimal SDK diset 11 (Android 3.0). Coba buka

    MainActvity.java dan lihat function onCreateOptionMenu. Terlihat fungsi ini

    mengisi ActionBar dengan isi res/menu/main.xml

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    74

    Coba lihat /res/menu/main.xml

    Kita akan bahas lebih detil tentang ini pada bagian berikutnya.

    ActionItem

    ActionItem berbentuk button atau text yang dapat diakses langsung dari

    ActionBar. Jika tidak cukup, maka actionitem akan muncul di overflow menu.

    Buat project baru, pastikan minimal SDK diisi dengan 11 (Android 3.0)

    Kemudian buka /res/menu/main.xml. Isi dengan item sebagai berikut. Kita

    menambahkan dua item Add dan Delete yang akan muncul jika tempatnya cukup (ifRoom).

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    75

    Kemudian :

    Jangan lupa di simpan (Ctrl+S) untuk melihat perubahaannya

    Lakukan cara yang sama untuk Delete sehingga terlihat file menu.xml seperti

    dibawah ini.

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    76

    Saat dijalankan akan menghasilkan ActionBar sebagai berikut.

    Sekarang kita akan buat aksi kalau ADD atau DELETE ditekan. Override fungsi onOptionsItemSelected dan cek hasil getItemId().

    String Resources

    Pada kode diatas kata add dan delete dimasukkan ke dalam kode. Ini bukan praktek yang baik (perhatikan warning pada /main.xml), karena akan menyulitkan

    jika app akan diporting untuk bahasa lain. Solusinya adalah dengan menggunakan

    string resources.

    Pertama-tama, buka /res/values/strings.xml. Perhatikan bahwa secara default telah

    ada string untuk nama app (app_name) dan lainnya. Tambahkan add dan delete

    (gambar bawah). Jangan lupa save setelah selesai.

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    77

    Selanjutnya resource dapat diakses dalam file xml dengan @string/nama_res" sedangkan untuk mengaksesnya dalam source code gunakan R.string.nama_res.

    Sekarang kita akan mengubah item menu. Buka /res/menu/main.xml ganti kata

    add dan delete dengan @string/add dan @string/delete

    Sedangkan untuk MainActivity.java, ganti dengan R.string.add dan

    R.string.delete.

    Icon

    Umumnya action bar menggunakan icon yang lebih mudah dikenali oleh

    pengguna. Untuk menambahkan icon, cara yang paling mudah adalah

    mendownload Android design icon di:

    http://developer.android.com/design/downloads/index.html

    Setelah download dan ekstrak, pilih all_icons/holo_dark dan copy icon yang

    diinginkan (dengan Windows Explorer) ke direktori /res/drawable-hdpi,

    /res/drawable-mdpi dan /res/drawable-xhdpi. Ingat dalam pembahasan

    sebelumnya bahwa setiap resoulusi membutuhkan gambar yang terpisah.

    Setelah itu masuk ke package explorer dan refresh (F5), hasilnya akan seperti ini:

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    78

    Sesuai dengan penamaan standard untuk icon ActionBar, rename agar didahului

    dengan ic_menu_ Untuk me-rename, klik kanan pada nama file refactor rename. Semua resolusi secara otomatis akan diganti. Sehingga hasilnya sebagai

    berikut:

    Sekarang buka res/menu/main.xml dan tambahkan atribut android:icon

    Jalankan dan hasilnya akan seperti berikut:

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    79

    Jika kita ingin menambahkan teks disebelah icon, tambahkan nilai withText pada android:showAsAction sebagai berikut:

    Jika dijalankan hasilnya tidak berubah. Mengapa? karena tidak cukup ruang untuk

    menambahkan teks. Coba ubah orientasi AVD menjadi landscape dengan ctrl-F11

    maka tulisan akan muncul (gambar bawah). Untuk mengembalikan menjadi

    portrait tekan ctrl-F12.

    Selain ifRoom dan withText, pilihan yang lain adalah never agar item hanya muncul di overlflow menu (gambar bawah)

    Latihan:

    Modifikasi latihan activity-intent , tambahkan action item delete dan edit saat detil data mahasiswa (layar2)

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    80

    Pertemuan 8

    Ujian Tengah Semester

    Soal UJIAN TENGAH SEMESTER TERPISAH

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    81

    Pertemuan 9

    Penyimpanan Data

    Android menyediakan beberapa cara untuk menyimpan data: file,

    relasional database dengan SQLlite dan pasangan key/value yang disebut sistem

    preferences. Untuk sharing antar aplikasi disediakan mekanisme yang disebut

    ContentProvider.

    Shared Preferences

    Shared Preferences (SP) adalah mekanisme untuk menyimpan pasangan key-value

    untuk tipe data primitif (integer, double, string, booelan). SP cocok untuk

    penggunaan ringan seperti menyimpan setting aplikasi dan kondisi user interface

    misalnya pada saat activity masuk ke state sleep karena device menerima telepon.

    Data dalam shared preferences disimpan dalam device android dalam bentuk

    XML.

    Ada tiga mode untuk shared preferences (SP)

    MODE_PRIVATE: hanya aplikasi yang membuat SP yang dapat mengakses data

    MODE_WORLD_READABLE: aplikasi lain boleh membaca

    MODE_WORLD_WRITEABLE: aplikasi lain boleh membaca sekaligus menulis.

    Shared Preference objek untuk activity diperoleh melalui method

    getPreferences(). Contoh Kode berikut memperlihatkan cara penggunaan SP.

    Jangan lupa memanggil commit!

    Buat project

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    82

    Jalankan. Kemudian coba komentari bagian isi data, dan jalankan kembali

    aplikasi.

    Dapat dilihat data nama dan umur tersimpan walaupun aplikasi sudah ditutup.

    Pertemuan 10

    Topik Pertemuan 10

    Latihan:

    Buat applikasi yang menyimpan berapa kali aplikasi telah dijalankan. Tampilkan

    jumlah tersebut.

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    83

    SQLite

    SQLite adalah embedded database (hanya menggunakan sekitar 250KB memori)

    yang menyediakan fasilitas relational DBMS termasuk SQL. Referensi lengkap

    SQLite dapat dilihat di http://www.sqlite.org/ SQLite tidak hanya digunakan di

    Android.

    Setiap aplikasi memiliki instance database tersendiri, dan berbeda dengan shared

    preference, tidak disediakan fasilitas agar aplikasi dapat membaca database

    aplikasi lain.

    Untuk menggunakan SQLite, sangat dianjurkan menggunakan class helper untuk

    membuka dan menutup database, menginisiasi tabel dst. Helper juga digunakan

    saat melakukan upgrade struktur database jika suatu saat aplikasi diupdate. Class

    helper ini diturunkan dari class SQLiteOpenHelper.

    Buatlah project baru :

    Untuk latihan kita akan membuat aplikasi sederhana yang menyimpan data

    mahasiswa berupa nama dan nomor telpon. Pertama kita buat class helper terlebih

    dulu. Tambahkan ke dalam project tersebut satu class (ke project explorer, pilih

    src/nama package; klik kanan New Class). Pastikan superclass kelas ini

    adalah SQLiteOpenHelper. Beri nama class ini OpenHelper.

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    84

    Pada class OpenHelper berikut akan dibuat tabel Mahasiswa dan penanganan jika

    database diuprade.

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    85

    Selanjutnya kita akan membuat class yang melakukan manipulasi terhadap data

    (insert, ambil data). Beri nama DbMahasiswa, source code DbMahasiwa adalah

    sebagai berikut:

    package com.example.latihansepuluh;

    import android.content.ContentValues;

    import android.content.Context;

    import android.database.Cursor;

    import android.database.sqlite.SQLiteDatabase;

    public class DbMahasiswa {

    //class yang menampung record Mahasiswa

    public static class Mahasiswa {

    public String nama;

    public String telepon;

    }

    private SQLiteDatabase db;

    private final Context con;

    private final OpenHelper dbHelper;

    public DbMahasiswa (Context c) {

    con = c;

    dbHelper = new OpenHelper(con,"",null,0);

    }

    public void open() {

    db = dbHelper.getWritableDatabase();

    }

    public void close() {

    db.close();

    }

    public long insertMahasiswa(String nama, String noTelp) {

    ContentValues newValues = new ContentValues();

    newValues.put("NAMA", nama);

    newValues.put("TELEPON", noTelp);

    return db.insert("MAHASISWA", null, newValues);

    }

    public Mahasiswa getMahasiswa(String nama) {

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    86

    Cursor cur = null;

    Mahasiswa M = new Mahasiswa();

    //kolom yang diambil

    String[] cols = new String [] {"ID", "NAMA", "TELEPON"};

    //parameter, akan mengganti ? pada NAMA=?

    String[] param = {nama};

    cur =

    db.query("MAHASISWA",cols,"NAMA=?",param,null,null,null);

    if (cur.getCount()>0) { //ada data? ambil

    cur.moveToFirst();

    M.nama = cur.getString(1);

    M.telepon = cur.getString(2);

    }

    return M;

    }

    }

    Setelah kita membuat class helper dan class dbMahasiswa, sekarang kita akan

    memanfaatkan dua kelas tersebut. Kembali ke activity utama yaitu class

    MainActivity. Tambahkan kode dibagian onCreate sebagai berikut:

    Selain tipe INTEGER dan TEXT yang digunakan pada contoh diatas, dapat

    digunakan tipe REAL, BLOB. Semua tipe lain seperti boolean, date harus

    dimasukkan ke dalam tipe tersebut. SQLite tidak melakukan pengecekan tipe,

    sehingga bisa saja memasukkan tipe.

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    87

    Group By, Having, Order By

    Pada kode sebelumnya dapat dilihat penggunaan db.query untuk mengambil data

    mahasiswa dengan nama tertentu.

    Method query menerima tujuh parameter. Parameter pertama adalah nama table,

    parameter kedua adalah array kolom yang akan diambil (SELECT), parameter

    ketiga adalah bagian seleksi record (bagian setelah where), parameter keempat adalah isi bagian seleksi. Parameter 5, 6 dan 7 adalah bagian group by, having dan order by.

    Contoh penggunaan parameter 5-7 adalah sebagai berikut: jika kita menambahkan

    field KELAS pada tabel MAHASISWA dan kita ingin menampilkan jumlah mahasiswa per kelas (contoh misalnya ada kelas A, B, C dst), tapi hanya kelas

    yang mempunyai anggota >1 dengan kelas terurut descending, maka query-nya

    adalah sebagai berikut:

    select kelas, count(*) as jum from mahasiswa

    group by kelas

    having jum > 1

    order by kelas desc;

    Maka di dalam program pemanggilan quernya adalah sebagai berikut:

    RawQuery

    Selain method query, tersedia juga rawQuery untuk memasukkan langsung query.

    Sebagai contoh, berikut perbandingan antara query dengan rawQuery

    group by

    having order by

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    88

    Mana yang lebih baik? beberapa sumber mengatakan query lebih cepat

    dibandingkan rawQuery dan lebih mudah untuk dibaca.

    Loop Semua Record

    Untuk mengambil data semua record, dapat digunakan moveToNext() dalam

    loop seperti pada contoh berikut

    alternatif lain yang dapat digunakan untuk loop semua record adalah adalah:

    Mengisi ListView dengan Record

    Listview dapat langsung dihubungkan dengan database dan untuk mencegah user

    interface yang tidak responsif (ANR: Application Not Responding), idealnya data

    diload di background.

    Untuk mencapai hal ini dapat digunakan SimpleCursorAdapter, ContentProvider

    dan Loader. Sayangnya hal ini cukup kompleks (mudah-mudahan akan lebih

    disederhanakan di API berikutnya). Berikut adalah contoh penggunakan ketiga

    class tersebut.

    Pertama buat project baru:

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    89

    Seperti dalam contoh sebelumnya, buat class helper yang merupakan turunan dari

    kelas SQLiteOpenHelper.

    Catatan: untuk dapat menggunakan cursor adapter, table harus mengandung field

    _id (huruf kecil)

    package com.example.latihansebelas; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; public class DbHelper extends SQLiteOpenHelper { private static final int DATABASE_VERSION =1; private static final String DATABASE_NAME ="dbMhs"; //cursoradapter mewajibkan nama _id //harus _id dengan huruf kecil, JANGAN _ID private static final String TABLE_CREATE = "CREATE TABLE MHS (_id integer primary key autoincrement, " + "nama text);"; public DbHelper(Context context, String name,

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    90

    CursorFactory factory, int version) { super (context,DATABASE_NAME,factory,DATABASE_VERSION); } public DbHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { //create database db.execSQL(TABLE_CREATE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVer, int newVer) { //jika database diupgrade, hapus yang lama, buat yang baru db.execSQL("DROP TABLE IF EXISTS MHS"); onCreate(db); } }

    Selanjutnya kita akan membuat class Contentprovider untuk mengakses tabel.

    Catatan:

    Biasanya Contentprovider dibuat agar data app kita dapat diakses oleh

    app lain. Tapi class Contentprovider juga dapat digunakan di app

    sendiri secara private (tidak bisa diakses app lain). Keuntungan content

    provider adalah:

    1. Dapat dieksekusi secara asynchronus, sehingga menghindari error

    app not responding. 2. Memberikan akses tunggal ke data. 3. Memudahkan hubungan antara view (widget) dengan data melalui

    ContentObserver milik ContentResolver. 4. Dimanfaatkan untuk rest client app.

    Kerugian menggunakan contentprovider? relatif rumit.

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    91

    Class ini merupakan turunan dari ContentProvider (gambar bawah)

    Untuk tahap pertama hanya insert dan query yang dibuat. Update dan delete akan

    dibahas berikutnya. Contentprovider yang dibuat ini juga dapat digunakan untuk

    widget yang lain, tidak harus berupa ListView. Cara penggunaanya dapat dilihat

    di MainActivity nanti.

    package com.example.latihansebelas; import android.content.ContentProvider; import android.content.ContentValues; import android.content.UriMatcher; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.net.Uri; public class MhsContentProvider extends ContentProvider { // database private DbHelper database; // konstanta2 dibawah mendefinisikan bagaimana contentprovider ini diakses

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    92

    // contentprovider diakses melalui URI // contoh penggunaa URI ini dapat dilihat di MainActivity private static final int MHS = 1; private static final int MHS_ID = 2; private static final String AUTHORITY = "com.example.latihansebelas.contentprovider"; private static final String BASE_PATH = "mhs"; public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/" + BASE_PATH); private static final UriMatcher sURIMatcher = new UriMatcher( UriMatcher.NO_MATCH); static { sURIMatcher.addURI(AUTHORITY, BASE_PATH, MHS); sURIMatcher.addURI(AUTHORITY, BASE_PATH + "/#", MHS_ID); } @Override public Uri insert(Uri uri, ContentValues values) { // insert data int uriType = sURIMatcher.match(uri); SQLiteDatabase sqlDB = database.getWritableDatabase(); long id = 0; switch (uriType) { case MHS: id = sqlDB.insert("MHS", null, values); break; default: throw new IllegalArgumentException("URI tdk dikenal: " + uri); } // notifikasi getContext().getContentResolver().notifyChange(uri, null); return Uri.parse(BASE_PATH + "/" + id); }

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    93

    @Override public boolean onCreate() { database = new DbHelper(getContext()); return false; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { // query tabel SQLiteDatabase db = database.getWritableDatabase(); Cursor cur = null; int uriType = sURIMatcher.match(uri); switch (uriType) { case MHS: // ambil semua cur = db.query("MHS", projection, selection, selectionArgs, sortOrder, null, null); break; case MHS_ID: // ambil berdasarkan id nanti dibuat break; default: throw new IllegalArgumentException("URI tidak dikenal: " + uri); } // notifikasi cur.setNotificationUri(getContext().getContentResolver(), uri); return cur; } @Override public int update(Uri arg0, ContentValues arg1, String arg2, String[] arg3) { // nanti dibuat return 0; }

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    94

    @Override public int delete(Uri arg0, String arg1, String[] arg2) { // nanti dibuat return 0; } @Override public String getType(Uri arg0) { // nanti dibuat return null; } }

    Content provider ini harus didaftarkan di AndroidManifest. Buka dan tambahkan

    di dalam . android:exported=false menunjukkan bahwa content

    provider ini private dan tidak dapat diakses app lain. Sedangkan android:name

    adalah nama kelas, penggunaan titik pada .MhsContentProvider

    merupakan singkatan dari nama app. Jadi .MhsContentProvider artinya sama

    dengan com.example.latihansebelas.MhsContentProvider

    Lalu

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    95

    kemudian

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    96

    Pada AndroidManifest.xml terlihat seperti dibawah ini

    Setelah Helper dan ContentProvider dibuat, selanjutnya kita akan mempersiapkan

    ListView. Caranya seperti ListView pada contoh sebelumnya. Buka

    layout/activity_main.xml, drag listview.

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    97

    Selanjutnya buat xml layout baru sebagai isi dari baris di listview (pilih layout,

    klik kanan new Android XML ) Beri nama row.xml, dan tambahkan dua textview. Ganti namanya dengan tvNama dan tvId.

    Sebelum di lanjutkan karena pada saat membuat project LatihanSebelas minimum

    sdk adalah 8 maka kita ganti menjadi 11

    Selanjutnya kita akan melengkapi ActivityMain.java. Activity ini mengimplemen

    LoaderCallback sehingga data akan diload dibackground dan baru diisi ke

    ListView saat sudah selesai. Pada activity ini akan diinsert dua record kemudian

    ditampilkan dalam listview.

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    98

    package com.example.latihansebelas; import android.os.Bundle; import android.app.Activity; import android.app.LoaderManager.LoaderCallbacks; import android.content.ContentValues; import android.content.CursorLoader; import android.content.Loader; import android.database.Cursor; import android.support.v4.widget.SimpleCursorAdapter; import android.view.Menu; import android.widget.ListView; public class MainActivity extends Activity implements LoaderCallbacks{ // adapter untuk listview private SimpleCursorAdapter adapter; private void insertData() { // masukkan dua data untuk testing ContentValues values = new ContentValues(); values.put("nama", "puji"); // perhatikan penggunaan URI untuk mengidentifikasi contentprovider // isi dari MhsContentProvider.CONTENT_URI adalah: // content://edu.upi.cs.yudi.listviewdb.contentprovider/mhs getContentResolver().insert(MhsContentProvider.CONTENT_URI, values); values = new ContentValues(); values.put("nama", "alvi"); getContentResolver().insert(MhsContentProvider.CONTENT_URI, values); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    99

    ListView lv = (ListView) findViewById(R.id.listView1); // testing insert data. Setelah dijalankan sekali, bisa dikomentari insertData(); // harus _id dengan huruf kecil! String[] proj = new String[] { "_id", "nama" }; // widget UI yang dipetakan sesuai field diatas (di row.xml) int[] to = new int[] { R.id.tvId, R.id.tvNama }; getLoaderManager().initLoader(0, null, this); // adapter yang digunakan adalah simplecursoradapter adapter = new SimpleCursorAdapter(this, R.layout.row, null, proj, to, 0); lv.setAdapter(adapter); } @Override public Loader onCreateLoader(int id, Bundle args) { // load data ke cursor // harus ada _id dengan huruf kecil! String[] projection = { "_id", "nama" }; CursorLoader cursorLoader = new CursorLoader(this, MhsContentProvider.CONTENT_URI, projection, null, null, null); return cursorLoader; } @Override public void onLoadFinished(Loader loader, Cursor cur) { // dipanggil saat cursor sudah terisi, dilakukan // dibackground sehingga user interface tetap responsif // isi adapter dengan cursor yang sudah terisi adapter.swapCursor(cur); } @Override

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    100

    public void onLoaderReset(Loader loader) { // reset, kosongkan adapter.swapCursor(null); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }

    Latihan SQLite1:

    Buat applikasi untuk menyimpan datamahasiswa (NIM, NAMA, ALAMAT).

    Buatlah menu untuk menambahkan data dan mencari berdasarkan NIM (NIM

    diinput oleh user).

    Latihan SQLite2:

    Modifikasi latihan activity-intent agar dapat menyimpan ke database.

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    101

    Pertemuan 10

    File

    [cek untuk Android versi >=3.0?]

    File dapat disimpan baik di dalam device maupun di media penyimpanan (SD

    card). Secara default, aplikasi tidak dapat mengakses file milik aplikasi lain. Bagi

    anda yang telah mengenal stream dan file di Java, anda dapat membaca secara

    cepat bagian ini, karena tidak ada perbedaan antara Java dan Android. Class yang

    mensupport operasi file disediakan di package java.io.*

    Stream

    Pemrosesan file dalam jumlah besar, yang membutuhkan kinerja yang tinggi

    masih dibutuhkan berbagai bidang. Misalnya aplikasi backend yang mengelola

    dokumen di perusahaan, aplikasi pengolahan teks, aplikasi pemroses XML,

    HTML, aplikasi simulasi-simulasi dan sebagainya. Penguasaan stream dan file

    akan membantu anda untuk memecahkan berbagai masalah

    Stream adalah aliran data. Bayangkan stream sebagai sungai yang mengalirkan

    air. Seperti sungai, stream mengalirkan byte-byte data. Pemrosesan input dan

    output di Java pada prinsipnya menggunakan konsep stream ini.

    Gambar 1: Input Stream (diambil dari http://download.oracle.com/javase/tutorial)

    Gambar 1: Output Stream (diambil dari http://download.oracle.com/javase/tutorial)

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    102

    Untuk membantu programmer, tersedia banyak class-class untuk memproses

    stream, bahkan lebih dari 60 kelas! (lihat gambar 3 dan gambar 4). Tentu saja

    tidak semua kelas tersebut harus digunakan, programmer bisa memilih kelas mana

    yang dibutuhkan untuk menyelesaikan masalahnya.

    Persiapan

    Sebelum memulai, pastikan emulator sudah memiliki SD-Card

    Lalu untuk setiap project yang akan mengakses ke SD Card, tambahkan ijin untuk

    menulis ke media penyimpanan external di AndroidManifest.xml

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    103

    File Teks

    Sebelum mulai, pastikan virtual device telah diset SD-Card dan AndroidManifest

    telah ditambahkan ijin untuk menulis (baca bagian persiapan)

    File teks penting untuk menulis data, XML, HTML dan sebagainya. File teks

    dianggap sebagai stream dari karakter. Untuk menulis ke file teks, cara yang

    paling mudah adalah dengan menggunakan class PrintWriter. Berikut adalah

    contoh program yang menulis dua baris ke file teks.

    Pada MainActivity.java

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    104

    Sedangkan untuk membaca, dapat digunakan class Scanner yang dapat membaca

    baris demi baris. Berikut contoh codenya, letakkan di bawah code atas.

    Latihan: buat file teks berisi

    Halo

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    105

    Objek Stream

    Java telah menyediakan fasilitas agar objek dapat disimpan ke dalam stream

    secara otomatis dengan mudah. Class yang digunakan adalah ObjectOutputStream

    dan ObjectInputStream.

    Setelah membuat project baru (pastikan AndroidManifest.xml-nya telah

    ditambahkan ijin menulis ke external!) Sekarang coba kita buat class Mahasiswa

    sebagai berikut.

    Tambah class baru (Filenewclass). Perhatikan penggunaan interface java.io.Serializable yang menandakan bahwa class ini dapat disimpan ke dalam

    stream

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    106

    Codenya sebagai berikut. Perhatikan variabel serialVersionUID untuk

    menyatakan versi class. Jangan lupa class Mahasiswa ini mengimplementas

    interface Serializable.

    Selanjutnya, buat program untuk menulis dua objek mahasiswa ke dalam class.

    Penulisan objek ke stream sangat mudah, hanya dengan class

    ObjectOutputStream dan method writeObject. Buatlah code ini di activity

    MainActivity.java.

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    107

    Sekarang kita lanjutkan ke pembacaan objek yang telah dituliskan. Untuk

    membaca file berisi objek digunakan class FileInputStream dan

    ObjectInputStream. Code ditulis di bawah code diatas;

    Catatan:

    Perhatikan penggunaan code

    ObjectOutputStream out =

    new ObjectOutputStream (new FileOutputStream(namaFileOutput));

    Pada code diatas Objek FileOuputStream dibungkus dengan ObjekOutputStream. Ini yang disebut dengan stream layering, yaitu penggunaan kombinasi beberapa class

    yang memproses stream. Contoh yang lain:

    pbin = new PushbackInputStream(

    new BufferedInputStream(new FileInputStream("pegawai.dat"))));

    Walaupun pada awalnya teknik layering stream ini terlihat sulit, tapi teknik ini sangat

    bermanfaat untuk mengkombinasikan berbagai fitur yang dibutuhkan.

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    108

    Latihan:

    Buatlah class User dengan atribut username dan password. Simpan data objek

    user (minimal 3 user) ke dalam Android menggunakan file teks dan file objek.

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    109

    Pertemuan 11

    Membuat Aplikasi Client Server Project

    Ada beberapa alasan diperlukan koneksi dengan server diantaranya: 1. Device memiliki beberapa keterbatasan (komputasi, space). Server dapat

    digunakan untuk memproses data dan hasilnya saja yang akan digunakan di device.

    2. Sinkronisasi data. Pengguna dapat mengambil data terkini atau mengupload data tambahan.

    Sebelum memulai, pastikan emulator telah terhubung dengan internet, jalankan

    browser dan coba buka salah satu website.

    Jika tidak terhubung dengan internet, dapat digunakan server local seperti Apache

    atau PhpMyAdmin.

    PENTING: Tambahkan di AndroidManifest permission untuk koneksi

    internet. Tanpa menambahkan ini, program anda tidak akan berjalan!

    Letakkan permission ini di atas application (gambar bawah)

  • PUJIANTO, S.KOM

    11/13/13

    PEMROGRAMAN ANDROID

    110

    A. Membuat Database

    1. Buat database dengan nama db_latihan

    2. Buat table tbl_mahasiswa dengan attribute :

    a) Nim varchar (10)

    b) Nama varchar (45)

    c) Jurusan varchar (45)

    Jalankan perintah sql berikut ini untuk membuat table

    Masukkan data dengan menjalankan perintah sql berikut ini

    B. Membuat Server dengan PHP

    Buat