Anda di halaman 1dari 165

LAPORAN PRAKTIKUM

MOBILE PROGAMING
SEMESTER GANJIL TAHUN AKADEMIK 2019/2020

Disusun oleh :
Nama : Tareh Rozzaq Adzdziqri
NIM : 1718033
Jurusan : Teknik Informatika S-1
Kelompok : 07

PROGRAM STUDI TEKNIK INFORMATIKA S-1


FAKULTAS TEKNOLOGI INDUSTRI
INSTITUT TEKNOLOGI NASIONAL MALANG
2019
LEMBAR PERSETUJUAN

MOBILE PROGAMING

SEMESTER GANJIL TAHUN AKADEMIK 2019/2020

Disusun Oleh

NAMA : Tareh Rozzaq Adzdziqri

NIM : 1718033

KELOMPOK : 07

Mengetahui Menyetujui

Ka. Lab. Rekayasa Perangkat Lunak Dosen Pembimbing

(Ahmad Faisol, ST.MT) (Joseph Dedy Irawan, ST., MT.)

NIP.P : 1031000431 NIP : 197404162005011002

PROGRAM STUDI TEKNIK INFORMATIKA S-1


FAKULTAS TEKNOLOGI INDUSTRI
INSTITUT TEKNOLOGI NASIONAL MALANG
2019
i

KATA PENGANTAR

Dengan memanjatkan puji syukur kehadirat Allah SWT, karena atas


berkah rahmat dan karunia-Nya sehingga penulis dapat menyelesaikan Laporan
Praktikum Mata Kuliah Mobile Progaming, guna persyaratan dalam menempuh
matakuliah tersebut.
Laporan ini di susun berdasarkan percobaan dan teori dasar yang ada
dalam buku panduan praktikum, teori yang diperoleh praktikan dari perkuliahan,
dan tidak lupa yaitu Internet sehingga penulis dapat menambah tidak hanya
menguasai teori saja namun juga memahami serta mengaplikasikannya.
Terwujudnya laporan ini, tentunya tidak lepas dari bantuan-bantuan yang
telah penulis terima. Pada kesempatan ini, penulis menyampaikan terima kasih
yang sebesar-besarnya kepada yang terhormat:
1. Bapak / Ibu selaku dosen pembimbing Praktikum Mobile
Progaming.
2. Bapak Ahmad Faisol, ST. MT dan Ibu Nurlaily Vendyansyah, ST.
MT Selaku dosen matakuliah Mobile Progaming
3. Bapak Joseph Dedy Irawan, ST., MT. selaku Ketua Pelaksana
Praktikum Mobile Progaming Program Studi Teknik Informatika
ITN Malang.
4. Instruktur Lab.Pemrograman dan RPL Teknik Informatika yang
telah memberi petunjuk kepada penulis selama pelaksanaan
praktikum.
5. Rekan-rekan yang telah membantu dalam pelaksanaan dan
penyelesaian laporan ini.
Harapan penulis, laporan praktikum ini bermanfaat bagi penulis sendiri
maupun pembaca sekalian.
Malang,……….2019

Penulis
ii

DAFTAR ISI
KATA PENGANTAR ............................................................................................. i
DAFTAR ISI ........................................................................................................... ii
DAFTAR GAMBAR .............................................................................................. v
BAB I PENDAHULUAN ....................................................................................... 1
I.1 Latar Belakang ............................................................................................... 1
I.2 Rumusan Masalah .......................................................................................... 2
I.3 Tujuan ............................................................................................................ 2
I.4 Manfaat .......................................................................................................... 2
BAB II INTENT & FRAGMENT .......................................................................... 1
II.1 Landasan Teori ............................................................................................. 1
A. Sejarah Android .......................................................................................... 1
B. Intent ........................................................................................................... 3
C. Fragment ..................................................................................................... 4
II.2 Langkah – Langkah Praktikum ..................................................................... 5
II.3 Tugas 1 : Membuat Program Intent .............................................................. 5
Gambar 2.1 Tampilan awal aplikasi .................................................................. 11
II.4 Tugas 2 : Membuat Fragment .................................................................... 11
II.6 Tugas Rumah 1 : membuat intent untuk menghitung luas segitiga ............ 14
II.7 Tugas Rumah 2 : Membuat tampilan fragment .......................................... 18
II.9 Kesimpulan ................................................................................................. 21
BAB III NAVIGATION & ACTION BAR ............................................................ 1
III.1 Landasan Teori ............................................................................................ 1
A. Navigation ................................................................................................... 1
B. Action Bar ................................................................................................... 2
III.2 Langkah – Langkah Praktikum ................................................................... 7
III.3 Tugas 1 : Membuat tampilan NavigationBar .............................................. 7
III.4 Tugas Rumah 1 : Mengimplementasikan Tampilan Pada Navbar ............ 14
Gambar 3.8 Tampilan Halaman Biodata Melalui Navbar................................. 19
III.5 Kesimpulan ................................................................................................ 19
BAB IV RECYCLERVIEW ................................................................................... 1
IV.1 Landasan Teori ............................................................................................ 1
iii

IV.2 Langkah – Langkah Praktikum ................................................................... 3


IV.3 Tugas 1 : Membuat RecyclerView sederhana .............................................. 3
IV.4 Tugas Rumah 1 : Menerapkan RecyclerView pada aplikasi dilengkapi
dengan foto pada tiap list..................................................................................... 8
IV.5 Kesimpulan ............................................................................................... 14
BAB V BACKGROUND PROCESS ..................................................................... 1
V.1 Landasan Teori ............................................................................................. 1
A. Service......................................................................................................... 1
B. Broadcast Receiver...................................................................................... 4
V.2 Langkah – Langkah Praktikum .................................................................... 1
V.3 Tugas 1 : Membuat Background Proccess Alarm sederhana ....................... 1
V.4 Tugas Rumah 1 : Membuat Background Proccess dengan Intent ............... 7
V.5 Kesimpulan ................................................................................................. 13
BAB VI SQLITE DATABASE .............................................................................. 1
VI.1 Landasan Teori ............................................................................................ 1
8.3.1 Penjelasan Database SQLite ................................................................... 1
8.3.2 SQLite java classes ................................................................................. 3
VI.2 Langkah – Langkah Praktikum ................................................................... 6
VI.3 Tugas 1 : Membuat progam untuk menampilkan data dari database ......... 6
VI.4 Tugas Rumah 1 : Membuat program berisikan database dengan 3 CRUD
........................................................................................................................... 20
VI.5 Kesimpulan ............................................................................................... 32
BAB VII REST API ................................................................................................ 1
VII.1 Landasan Teori .......................................................................................... 1
VII.2 Langkah – Langkah Praktikum .................................................................. 4
VII.3 Tugas 1 : Membuat tampilan Movie List ................................................... 4
VII.# Tugas Rumah 1 : Membuat Prototipe Untuk Tugas Besar ..................... 12
VII.# Kesimpulan .............................................................................................. 14
BAB VIII PROJECT ............................................................................................... 1
VIII.1 Landasan Masalah .................................................................................... 1
VIII.2 Langkah – Langkah Project ...................................................................... 2
VIII.3 Project ....................................................................................................... 2
VIII.4 Kesimpulan ............................................................................................. 36
iv

BAB IX KESIMPULAN ........................................................................................ 1


DAFTAR PUSTAKA ............................................................................................. 1
v

DAFTAR GAMBAR
Gambar 2.2 Tampilan hasil running program biodata ..................................... 11
Gambar 2.3 Tampilan hasil running program fragment ................................... 14
Gambar 2.4 Tampilan hasil running program menghitung luas segitiga ......... 18
Gambar 2.6 Tampilan program untuk menampilkan fragment ........................ 21
Gambar 3.1 Mengubah Judul ActionBar dengan Nama Activity........................ 2
Gambar 3.2 Mengganti gambar icon ActionBar ................................................ 4
Gambar 3.3 Menampilkan 2 ikon pada action bar ............................................. 6
Gambar 3.4 Tampilan Toolbar ........................................................................... 7
Gambar 3.5 Tampilan hasil dari navigasi ......................................................... 12
Gambar 3.6 Tampilan hasil dari activity biodata ............................................. 13
Gambar 3.7 Tampilan pada Navbar ................................................................. 19
Gambar 4.1 Contoh penggunaan RecyclerView ................................................ 2
Gambar 4.2 Komponen pembentuk RecyclerView............................................. 2
Gambar 4.3 Tampilan hasil running program recycler view .............................. 8
Gambar 4.4 Tampilan hasil running program recycler view dengan tambahan
ikon profil pada tiap list.................................................................................... 13
Gambar 5.1 Tampilan pada saat mengeset waktu alarm .................................... 6
Gambar 5.2 Tampilan saat ada notifikasi alarm ................................................. 6
Gambar 5.3 Tampilan pada saat atur waktu alarm ........................................... 11
Gambar 5.4 Tampilan saat ada notifikasi alarm ............................................... 12
Gambar 5.5 Tampilan saat bilah notifikasi di klik ........................................... 12
Gambar 6.4 Tampilan create ............................................................................ 19
Gambar 6.5 Tampilan read ............................................................................... 20
Gambar 6.6 Tampilan delete ............................................................................ 20
Gambar 6.4 Tampilan create ............................................................................ 31
Gambar 6.5 Tampilan read ............................................................................... 31
Gambar 6.6 Tampilan delete ............................................................................ 31
Gambar 7.1 Tampilan movie list ...................................................................... 11
Gambar 7.2 Prototipe Halaman Home ............................................................. 12
Gambar 7.3 Prototipe Halaman Pendaftaran .................................................... 12
Gambar 7.4 Prototipe Halaman Login ............................................................. 13
vi

Gambar 8.1 Tampilan Halaman Awal .............................................................. 32


Gambar 8.2 Tampilan Halaman Register ......................................................... 33
Gambar 8.3 Tampilan Halaman Login ............................................................. 34
Gambar 8.4 Tampilan Halaman Home............................................................. 34
Gambar 8.5 Tampilan Halaman Tambah Data ................................................. 35
Gambar 8.6 Halaman Tampil Data................................................................... 35
Gambar 8.7 Halaman Tampilan About ............................................................ 36
I-1

BAB I
PENDAHULUAN
I.1 Latar Belakang
Sejak pertama kali diperkenalkan pada 2008, sistem operasi Hp sejuta
umat yaitu Android kerap mengeluarkan versi Android terbaru. Setiap versi
Android terbaru pastinya memiliki fitur baru dan perbaikan bug dari versi
pendahulunya. Selain itu, setiap versi Android memiliki tampilan antarmuka
(UI) yang berbeda sehingga menjadi ciri khas yang melekat di masing-masing
versi. Selain itu, Google juga memberi penamaan yang unik di setiap versi
Android terbarunya. Mulai dari versi Android 1.5 hingga terbaru 9.0 setiap
versinya diberi nama makanan pencuci mulut atau camilan manis seperti kue,
permen, dan lain sebagainya. Tak hanya itu, penamaannya juga mengikuti
urutan abjad yang dimulai dari C, D, E, F, dan seterusnya.

Pemrograman Android adalah pemrograman berbasis Java untuk membuat


aplikasi pada device smartphone, tablet maupun device lainnya yang
menggunakan sistem operasi berbasis Android. Untuk pemahaman nya,
Android itu sistem operasi sama seperti Windows, Linux untuk PC.

Java adalah bahasa pemrograman yang dapat dijalankan di berbagai


komputer termasuk telepon genggam. Bahasa ini awalnya dibuat oleh James
Gosling saat masih bergabung di Sun Microsystems saat ini merupakan
bagian dari Oracle dan dirilis tahun 1995. Bahasa ini banyak mengadopsi
sintaksis yang terdapat pada C dan C++ namun dengan sintaksis model objek
yang lebih sederhana serta dukungan rutin-rutin aras bawah yang minimal.
Aplikasi-aplikasi berbasis java umumnya dikompilasi ke dalam p-code
(bytecode) dan dapat dijalankan pada berbagai Mesin Virtual Java (JVM).
Java merupakan bahasa pemrograman yang bersifat umum/non-spesifik
(general purpose), dan secara khusus didisain untuk memanfaatkan
dependensi implementasi seminimal mungkin. Karena fungsionalitasnya yang

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
I-2

memungkinkan aplikasi java mampu berjalan di beberapa platform sistem


operasi yang berbeda, java dikenal pula dengan slogannya, "Tulis sekali,
jalankan di mana pun". Saat ini java merupakan bahasa pemrograman yang
paling populer digunakan, dan secara luas dimanfaatkan dalam
pengembangan berbagai jenis perangkat lunak aplikasi ataupun aplikasi

I.2 Rumusan Masalah


1. Apa itu Android?
2. Software apa saja yang dapat digunakan untuk membuat suatu aplikasi
Android?
3. Apa bahasa yang digunakan untuk membangun sebuah aplikasi Android?

I.3 Tujuan
1. Memahami tentang pemrograman Android
2. Mempelajari cara membuat sebuah aplikasi sederhana menggunakan
software Android Studio
3. Menerapkan pemrograman Android pada sebuah project aplikasi

I.4 Manfaat
1. Mahasiswa mampu memahami tentang dasar-dasar pemrograman Android
2. Mahasiswa mampu membuat aplikasi sederhana menggunakan sotware
Android Studio
3. Mahasiswa mampu menerapkan konsep pemrograman Android pada
project aplikasi

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
II-1

BAB II
INTENT & FRAGMENT
JumlahPertemuan : 2 x 60 menit

TujuanPraktikum : 1. Mahasiswa mengenal Android.


2. Mahasiswa mengenal Android Studio sebagai IDE
(Integrated Development Environment) resmi dari
Google untuk Android.
Alat / bahan : 1. Laptop
2. Smartphone
3. Modul Praktikum

II.1 Landasan Teori


A. Sejarah Android
Android merupakan sistem operasi yang berbasis Linux dan dirancang
untuk perangkat seluler layar sentuh seperti smartphone serta komputer
tablet. Android pada awalnya dikembangkan oleh perusahaan bernama
Android, Inc., dengan dukungan finansial yang berasal dari Google, yang
kemudian Google pun membelinya pada tahun 2005. Sistem operasi
android tersebut secara resmi dirilis pada tahun 2007, bersamaan dengan
didirikannya sebuah perusahaan Open Handset Alliance, konsorsium dari
beberapa perusahaan-perusahaan perangkat keras, perangkat lunak, serta
telekomunikasi yang memiliki tujuan untuk memajukan standar terbuka
dari perangkat seluler. Ponsel yang berbasis sistem operasi Android
pertama dijual pada bulan Oktober 2008.
Pada mulanya berasal dari perusahaan bernama Android, Inc.
didirikan tempatnya di Palo Alto, California, pada Oktober tahun 2003
oleh Andy Rubin (pendiri Danger), Rich Miner seorang pendiri Wildfire
Communications, Inc., Nick Sears seorang mantan VP T-Mobile, dan
Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
II-2

Chris White seorang kepala desain dan pengembangan antarmuka WebTV


untuk mengembangkan sebuah "perangkat seluler pintar yang lebih sadar
tentang lokasi dan preferensi penggunanya".
Tujuan awal dari perkembangan tersebut pada mulanya diperuntukkan
bagi kamera digital, namun disadari bahwa pasar dari kamera digital tidak
besar potensinya, dan pengembangan Android lalu dialihkan pada pasar
telepon pintar atau smartphone untuk menyaingi Symbian serta Windows
Mobile (iPhone Apple pada saat itu belum dirilis). Meskipun para
pengembang Android tersebut merupakan pakar-pakar teknologi yang
berpengalaman, Android Inc. dijalankan secara diam-diam dan hanya
diungkapkan bahwa para pengembang tersebut sedang berusaha
menciptakan sebuah perangkat lunak yang dapat diperuntukkan untuk
telepon seluler.
Google mengakuisisi perusahaan Android Inc. pada tanggal 17
Agustus 2005 dan menjadikannya sebagai anak perusahaan yang dimiliki
oleh Google. Pendiri Android Inc. yaitu Rubin, Miner, serta White tetap
bekerja pada perusahaan tersebut setelah diakuisisi oleh Google. Di
Google, tim yang dipimpin oleh Andy Rubin mulai untuk mengembangkan
sebuah platform perangkat seluler dengan menggunakan kernel Linux.
Sejak tahun 2008, Android mulai secara bertahap melakukan sejumlah
pembaruan atau update untuk meningkatkan kinerja dari sistem operasi
tersebut dengan menambahkan fitur baru, memperbaiki bug pada versi
android yang sebelumnya. Setiap versi yang dirilis dinamakan secara
alfabetis dengan berdasarkan nama sebuah makanan pencuci mulut, seperti
cupcake, donut, dan sebagainya. Berikut nama-nama versi android.

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
II-3

B. Intent
Intent adalah mekanisme untuk melakukan sebuah aksi dan
komunikasi antar komponen aplikasi pada platform Android. Atau dapat
juga dijelaskan sebagai sebuah object yang memungkinkan kita untuk
dapat berkomunikasi antara Activity satu dengan Activity lainnya. Ada tiga
penggunaan umum Intent dalam aplikasi Android yaitu :
1. Memindahkan satu Activity ke Activity lain dengan atau tidak
membawa data.
2. Menjalankan background Service, misal melakukan sinkronisasi ke
server dan menjalankan proses berulang (Periodic / Scheduler Task).
3. Mengirimkan objek Broadcast ke aplikasi yang membutuhkan.
Misalkan jika aplikasi membutuhkan proses menjalankan sebuah
Background Service setiap aplikasi melakukan Booting. Aplikasi
harus bisa menerima objek Broadcast yang dikirimkan oleh Android
untuk event Booting tersebut.
Intent memiliki dua bentuk, yaitu :
1. Explicit Intent, adalah tipe intent yang digunakan untuk menjalankan
komponen aplikasi dengan tahu detail dari nama kelas yang dituju
misal : com.praktik.activity.DetailActivity. Umumnya intent ini
digunakan untuk mengaktifkan komponen pada aplikasi yang sama.
2. Implicit Intent, adalah tipe intent yang tidak memerlukan detail nama
kelas yang ingin diaktifkan. Ini memungkinkan komponen dari
aplikasi lain bisa merespon request intent yang dijalankan.
Penggunaan tipe intent ini umumnya diperuntukkn guna menjalankan
fitur / fungsi dari komponen aplikasi lain. Contohnya, ketika kita
membutuhkan aplikasi kita untuk mengambil foto , daripada kita harus
membuat sendiri fungsi kamera lebih baik kita menyerahkan proses
tersebut pada aplikasi kamera bawaan dari device atau aplikasi kamera
lain yang telah terinstal sebelumnya pada device. Atau jika kita
membutuhkan fungsi berbagi konten, kita dapat memanfaatkan intent
Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
II-4

untuk menampilkan mana saja aplikasi yang bisa menawarkan fungsi


berbagi (share) konten.
C. Fragment
1. Fragment merupakan komponen yang memiliki fungsi untuk
menampilkan antar muka ke pengguna melalui Activity dengan
memiliki layout xml sendiri.
2. Fragment memiliki daur hidup sendiri dan bergantung penuh pada
daur hidup Activity dimana ia ditanamkan.
3. Penggunaan fragment lebih kepada pemecahan komponen tampilan
aplikasi untuk menjadi fleksibel dan dapat digunakan kembali
(reusable).
4. Fragment adalah sebuah reuseable class yang mengimplement
beberapa fitur sebuah Activity.
5. Satu activity bisa ditempeli lebih dari satu fragment.
6. Tidak seperti Activity, fragment tidak perlu didaftarkan ke dalam file
AndroidManifest.xml.
7. Satu kelas java dinyatakan sebuah fragment ketika kelas tersebut
meng-extends (inherit) kelas fragment.
8. Melalui Android support library, fragment dapat kompatibel sampai
Android API level 10 Gingerbread.
9. Analogi yang mendekati dengan fragment pada platform lain adalah
penggunaan komponen frame pada aplikasi berbasis web.

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
II-5

Ada beberapa state yang perlu diketahui sebelum menggunakan fragment :


a. Resumed Fragment dapat dilihat ketika Activity sedang berjalan.
b. Paused Ketika ada Activity lain yang menutupi sebagian dari Activity
dimana fragment ditambahkan. Yang dimaksud menutupi sebagian
adalah ketika Activitynya tidak tertutup sepenuhnya oleh Activity lain,
jadi masih ada bagian dari Activity yang masih bisa kelihatan di layar.
c. Stopped Ketika fragment tidak kelihatan di layar. Bisa jadi karena
Activity dimana fragment itu ditambahkan, mengalami state stopped
atau bahkan fragment itu sendiri sudah di remove dari Activity dan
dilemparkan ke Back Stack. Pada kondisi ini fragment masih hidup
dengan semua informasinya, akan tetapi sudah tidak kelihatan di layar
dan akan di destroy atau kill ketika Activitynya di destroy
II.2 Langkah – Langkah Praktikum
1. Buka aplikasi Android Studio.
2. Tulis Source Code.
3. Buka Comfile pada Android Studio.
II.3 Tugas 1 : Membuat Program Intent
Source code activity_main.xml :
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android
" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/welcome_in_my_first_project"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.497"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
II-6

app:layout_constraintVertical_bias="0.108" />
<Button android:id="@+id/btn_biodata"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/biodata"
android:onClick="biodata"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView"
app:layout_constraintVertical_bias="0.04" />
</androidx.constraintlayout.widget.ConstraintLayout>

Source code activity_biodata.xml :


xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Biodata">
<TextView android:id="@+id/output_angkatan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="40dp"
android:text="...."
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/textView17"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.757" />
<TextView android:id="@+id/output_jurusan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="48dp"
android:text="...."
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/textView18"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.676" />
<TextView android:id="@+id/output_nim"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="72dp"
android:text="...."
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/textView16"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.606" />
<TextView android:id="@+id/textView15"

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
II-7

android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Nama"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.042"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.535" />
<TextView android:id="@+id/textView17"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Angkatan"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.045"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.757" />
<TextView android:id="@+id/textView18"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Jurusan"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.044"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.676" />
<TextView android:id="@+id/textView16"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="NIM"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.041"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.606" />
<TextView android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Nama"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.042"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.085" />
<TextView android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="NIM"
app:layout_constraintBottom_toBottomOf="parent"

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
II-8

app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.041"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.157" />
<TextView android:id="@+id/textView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Angkatan"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.045"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.307" />
<TextView android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Jurusan"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.044"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.227" />

<EditText android:id="@+id/input_nama"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10" android:inputType="textPersonName"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.863"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.062" />
<EditText android:id="@+id/input_jurusan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10" android:inputType="textPersonName"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.863"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.221" />
<EditText android:id="@+id/input_nim"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10" android:inputType="textPersonName"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.863"
app:layout_constraintStart_toStartOf="parent"

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
II-9

app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.145" />
<EditText android:id="@+id/input_angkatan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10" android:inputType="textPersonName"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.863"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.306" />
<Button android:id="@+id/btn_tampil"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="tampilkan"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.534"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.426" />
<TextView android:id="@+id/output_nama"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="60dp"
android:text="...."
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/textView15"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.535" />
</androidx.constraintlayout.widget.ConstraintLayout>

Source code MainActivity.java :


package com.example.pertemuan1_intent;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent; import android.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity {
@Override protected void onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void biodata(View view){
Intent a = new Intent(MainActivity.this, Biodata.class);
startActivity(a);
}
}

Source code Biodata.java :

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
II-10

package com.example.pertemuan1_intent;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle; import android.view.View;
import android.widget.Button; import android.widget.EditText;
import android.widget.TextView;

public class Biodata extends AppCompatActivity {

@Override protected void onCreate(Bundle


savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_biodata);

final EditText nama = (EditText)findViewById(R.id.input_nama);


final EditText nim = (EditText)findViewById(R.id.input_nim);
final EditText jurusan =
(EditText)findViewById(R.id.input_jurusan);
final EditText angkatan =
(EditText)findViewById(R.id.input_angkatan);

final TextView nama_t =


(TextView)findViewById(R.id.output_nama);
final TextView nim_t =
(TextView)findViewById(R.id.output_nim);
final TextView jurusan_t =
(TextView)findViewById(R.id.output_jurusan);
final TextView angkatan_t =
(TextView)findViewById(R.id.output_angkatan);

final Button tampil =


(Button)findViewById(R.id.btn_tampil);
tampil.setOnClickListener(new View.OnClickListener(){
@Override public void onClick(View v)
{ String nama1 = nama.getText().toString();
String nim1 = nim.getText().toString();
String jurusan1 = jurusan.getText().toString();
String angkatan1 = angkatan.getText().toString();

nama_t.setText(nama1);
nim_t.setText(nim1);
jurusan_t.setText(jurusan1);
angkatan_t.setText(angkatan1);
}
});
}
}

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
II-11

Gambar 2.1 Tampilan awal aplikasi

Gambar 2.2 Tampilan hasil running program biodata


Analisa :
Program diatas merupakan program untuk menampilkan biodata
seorang mahasiswa menggunakan intent. Untuk membuat program tersebut
dibutuhkan 2 buah kelas xml dan kelas java. Kelas xml berguna untuk
merancang desain antarmuka pada android. Sedangkan kelas java berguna
sebagai tempat untuk memberi isian program yang akan di running. Intent
pada program tersebut berada pada button pada halaman awal, ketika di klik
akan mengarah pada halaman biodata.
II.4 Tugas 2 : Membuat Fragment
Source fragment1.xml :
<?xml version="1.0" encoding="utf-8"?> <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
II-12

android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorPrimary">

<TextView android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Ini adalah fragment 1"
android:textSize="25sp"
android:textColor="#000000" />

</LinearLayout>

Source code fragment1.java :


package com.example.pertemuan1_fragment;

import android.os.Bundle;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater; import android.view.View;
import android.view.ViewGroup; import
android.widget.TextView;

fragment1 extends Fragment {


@Override public View onCreateView(LayoutInflater
inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragmen1,container,false);
}

Source fragment2.xml :
<?xml version="1.0" encoding="utf-8"?> <FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000"
tools:context=".fragment2">

<!-- TODO: Update blank fragment layout --> <TextView


android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Ini adalah fragment 2"
android:textSize="25sp" android:textColor="#ffffff"
/>

</FrameLayout>

Source code fragment2.java :

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
II-13

package com.example.pertemuan1_fragment;

import android.os.Bundle;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater; import android.view.View;
import android.view.ViewGroup;

fragment2 extends Fragment {


@Override public View onCreateView(LayoutInflater
inflater, ViewGroup container,
Bundle savedInstanceState) { return
inflater.inflate(R.layout.fragment_fragment2, container,
false); }

Source code activity_main.xml :


<?xml version="1.0" encoding="utf-8"?> <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
tools:context=".MainActivity" >

<fragment android:id="@+id/fragment1"
android:name="com.example.pertemuan1_fragment.fragment1"
android:layout_width="0px"
android:layout_height="match_parent"
android:layout_weight="1" />

<fragment android:id="@+id/fragment2"
android:name="com.example.pertemuan1_fragment.fragment2"
android:layout_width="0px"
android:layout_height="match_parent"
android:layout_weight="1" />

</LinearLayout>

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
II-14

Gambar 2.3 Tampilan hasil running program fragment


Analisa :
Program diatas merupakan program untuk menampilkan fragment. Untuk
membuat sebuah fragment, dibutuhkan kelas yang nantinya dipakai pada
fragment. Pada kelas fragment menggnakan sebuah layout berupa
FrameLayout. Pada layout tersebut kita set untuk ukuran lebar dan tinggin
dari objek yang ingin kita buat. Ukuran tersebut ada 2 macam, yaitu
match_parent dan wrap_content. Match parent akan mengatur ukuran dari
objek sama seperti ukuran window aplikasi, sedangkan wrap content
mengatur ukuran berdasarkan panjang dari konten yang dibuat.

II.6 Tugas Rumah 1 : membuat intent untuk menghitung luas segitiga


Source Code activity_segi3.xml :
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".segi3">

<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
II-15

android:layout_height="wrap_content"
android:layout_marginTop="108dp"
android:text="PERHITUNGAN SEGITIGA"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0" />

<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ALAS"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.125"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.296" />

<EditText
android:id="@+id/pt_alas"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.631"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.285" />

<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TINGGI"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.13"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<EditText
android:id="@+id/pt_tinggi"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
II-16

app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.676"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<Button
android:id="@+id/btn_hitung"
android:layout_width="96dp"
android:layout_height="52dp"
android:text="HITUNG"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.825"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.609" />

<TextView
android:id="@+id/textView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="HASIL"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.126"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.73" />

<EditText
android:id="@+id/pt_hasil"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.722"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.73" />
</androidx.constraintlayout.widget.ConstraintLayout>

Source Code segitiga.java :


package com.example.tugas1pratikum;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class segi3 extends AppCompatActivity {

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
II-17

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_segi3);

final EditText alas = (EditText)


findViewById(R.id.pt_alas);
final EditText tinggi = (EditText)
findViewById(R.id.pt_tinggi);
final EditText hasil = (EditText)
findViewById(R.id.pt_hasil);
final Button hitung = (Button)
findViewById(R.id.btn_hitung);

hitung.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v) {
Double alas1 =
Double.parseDouble(alas.getText().toString());
Double tinggi1 =
Double.parseDouble(tinggi.getText().toString());
Double hasil1 = (alas1 * tinggi1) / 2;
hasil.setText(hasil1.toString());
}
});
}
}

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
II-18

Tampilan :

Gambar 2.4 Tampilan hasil running program menghitung luas segitiga


Analisa :
Pada Activity_segi3 mempunya fungsi untuk mengatur tata letak
interface atau antarmuka aplikasi perhitungan seigitiga, sedangkan pada
segi3.java berfungsi untuk memberikan fungsi perhitungan segitiga dan
perpindahan activity.
II.7 Tugas Rumah 2 : Membuat tampilan fragment
Source Code fragment.xml :
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".fragment1">
<!-- TODO: Update blank fragment layout -->
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorPrimaryDark"
android:text="Ini Fragment 1"
android:textColor="#FFEB3B" />
</FrameLayout>

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


<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
II-19

tools:context=".fragment2">

<!-- TODO: Update blank fragment layout -->


<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#8BC34A"
android:text="Ini Fragment 2"
android:textColor="#FAFAFA" />
</FrameLayout>

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


<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".fragment3">
<!-- TODO: Update blank fragment layout -->
<TextView
android:layout_width="390dp"
android:layout_height="match_parent"
android:background="#00BCD4"
android:text="Ini Fragment 3"
android:textColor="#FFFFFF" />
</FrameLayout>

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


<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".fragment4">
<!-- TODO: Update blank fragment layout -->
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#9C27B0"
android:text="Ini Fragment 4"
android:textColor="#FFC107" />
</FrameLayout>

Source Code fragment.java :


public class fragment extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fragment);
}
}

public class fragment1 extends Fragment {

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
II-20

public fragment1() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return
inflater.inflate(R.layout.fragment_fragment1, container,
false);
}
}

public class fragment2 extends Fragment {


public fragment2() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return
inflater.inflate(R.layout.fragment_fragment2, container,
false);
}
}

public class fragment3 extends Fragment {

public fragment3() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return
inflater.inflate(R.layout.fragment_fragment3, container,
false);
}
}

public class fragment4 extends Fragment {


public fragment4() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
II-21

// Inflate the layout for this fragment


return
inflater.inflate(R.layout.fragment_fragment4, container,
false);
}
}

Tampilan :

Gambar 2.6 Tampilan program untuk menampilkan fragment


Analisa :
Fragment.xml mempunya fungsi untuk mengatur desain masing –
masing fragment serta tata letak nya, sedangkan fragment,java mempunyai
fungsi untuk menggabungkan ke empat fragment tersebut pada satu activity
II.9 Kesimpulan
1. Mahasiswa dapat menerapkan konsep dasar Mobile Progaming.
2. Mahasiswa dapat memahami konsep intent dan menerapkannya
3. Mahasiswa dapat memahami konsep fragment dan menerapkannya

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
III-1

BAB III
NAVIGATION & ACTION BAR
JumlahPertemuan : 2 x 60 menit

TujuanPraktikum : 1. Mampu memahami dasar – dasar pemrograman


Android
2. Mampu mengaplikasikan konsep navigation pada
aplikasi Android
3. Mampu mengaplikasikan konsep action bar pada
aplikasi Android
Alat / bahan : 1. Laptop
2. Smartphone
3. Modul Praktikum

III.1 Landasan Teori


A. Navigation
Navigasi adalah petunjuk posisi dan arah perjalanan. Di dalam dunia
web, navigasi dianggap penting agar user yang sedang berada di dalam
halaman tertentu tidak tersesat dan mudah menemukan halaman-halaman
lain dalam website Anda.
Biasanya, pada sebuah website, navigasi tertampil pada menu dan
link yang terstruktur. Seringkali, saat kita membuka sebuah website, kita
merasa kesal karena tidak mendapatkan halaman website yang dicari
dikarenakan navigasi yang ruwet dan tidak jelas.
Selain itu dapat diartikan, Menu navigasi adalah sebuah fasilitas yang
diberikan oleh si pemilik situs dimana didalamnya berisi sekumpulan
link-link penting. Menu navigasi juga berfungsi sebagai pemandu kepada
pengunjung agar dapat lebih mudah dalam menentukan kategori yang
diinginkan tanpa harus bersusah payah mencarinya.

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
III-2

Menu navigasi dapat berbentuk mendatar (horizontal) atau menurun


(vertical) juga dapat dibuat bercabang dengan sub menu (dropdown) atau
tidak, tergantung kebutuhan dari situs tersebut
B. Action Bar
ActionBar, kini dikenal dengan nama App Bar, adalah elemen
navigasi konsisten yang menjadi standar aplikasi Android modern.
ActionBar dapat terdiri dari:
1. Sebuah ikon aplikasi
2. Sebuah "tombol kembali"
3. Nama activity atau aplikasi
4. Ikon untuk sebuah activity
5. Navigasi konsisten (termasuk navigation drawer)
Setiap aplikasi akan memiliki ActionBar (kecuali jika memang
ditiadakan) secara otomatis. Saat ini, ActionBar otomatis sudah
memberikan nama Activity yang aktif di judulnya.

Gambar 3.1 Mengubah Judul ActionBar dengan Nama Activity


Judul ActionBar yang ditampilkan di atas layar diatur oleh
AndroidManifest.xml. Pada contoh di bawah ini, activity bernama
"FirstActivity" memiliki sebuah ActionBar dengan nilai yang ada di
@string/activity_name. Jika nilai dari string tersebut adalah "Foo", maka
judul yang ditampilkan di ActionBar untuk activity ini akan menajdi
"Foo". Perhatikan bahwa elemen application dapat diberikan atribut
android:label yang akan memberikan judul default jika activity atau
komponen lain tidak meiliki label.

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
III-3

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

android:name="com.codepath.example.simpleapp.FirstActivi
ty"
android:label="@string/activity_name" >
</activity> </application>

Ubah android:label atau android:icon untuk mengatur judul atau


ikon ActionBar untuk activity yang aktif atau untuk aplikasi secara
keseluruhan pada file Java activity, kita juga dapat memanggil
getSupportActionBar() untuk mengambil referensi ke ActionBar dengan
memodifikasi atau mengakses properti ActionBar saat program berjalan:

ActionBar actionBar = getSupportActionBar(); // or


getActionBar();
getSupportActionBar().setTitle("My new title"); // set the
top title
String title = actionBar.getTitle().toString(); // get the
title actionBar.hide(); // or even hide the actionbar

Menampilkan Gambar Ikon ActionBar

Di material design guidelines Android 5.0, penggunaan ikon di


ActionBar sudah tidak disarankan lagi. Meskipun kita masih bisa
menampilkannya dengan cara:
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setLogo(R.mipmap.ic_launcher);
getSupportActionBar().setDisplayUseLogoEnabled(true);

Yang menghasilkan :

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
III-4

Gambar 3.2 Mengganti gambar icon ActionBar

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
III-5

Menambahkan Action Items

Untuk menambahkan action ke Actionbar, kita perlu menambahkannya


di menu activity dan bila sudah diatur dengan bear, maka ia akan tampil
sebagai ikon di kanan atas.

Sebuah activity akan mengisi ActionBar dari dalam method


onCreateOptionsMenu():

public class MainActivity extends AppCompatActivity {


@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Membaca file menu dan menambahkan isinya ke
action bar jika ada.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
}

Isi dari sebuah ActionBar pada umumnya disebut action. Gunakan


method di atas berikut untuk membuat action dari menu yang ada di
dalam fileres/menu/menu_main.xml:

<!-- Menu file for `activity_movies.xml` is located in a


file
such as `res/menu/menu_movies.xml` -->
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/miCompose"
android:icon="@drawable/ic_compose"
app:showAsAction="ifRoom"
android:title="Compose">
</item>
<item
android:id="@+id/miProfile"
android:icon="@drawable/ic_profile"
app:showAsAction="ifRoom|withText"
android:title="Profile">
</item> </menu>

Perhatikan juga bahwa kita perlu menambah namespace xmlns:app


agar dapat menggunakan atribut showAsAction. Alasannya karena

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
III-6

compatibility library digunakan agar opsi showAsAction="ifRoom" dapat


bekerja. Opsi ini dibutuhkan untuk menampilkan action sebagai sebuah
ikon. Jika tidak ada ruangan yang cukup untuk ditampilkan di actionbar,
ia akan tampil di menu overflow (titik tiga). Apabila kita juga
memberikan atribut withText maka akan muncul teks bersamaan dengan
ikon yang ditampilkan.

Gambar 3.3 Menampilkan 2 ikon pada action bar


Menangani Klik di ActionBar
Ada dua cara untuk menangani klik pada sebuah item ActionBar.
Cara pertama menggunakan android:onClick di menu XML seperti saat
menambahkan klik pada Button:
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/item1"
android:icon="@drawable/ic_compose"
android:onClick="onComposeAction"
app:showAsAction="ifRoom"
android:title="Compose">
</item>
</menu>
Lalu membuat method onComposeAction di activity yang
membaca file menu tersebut:
public class MainActivity extends AppCompatActivity {
public void onComposeAction(MenuItem mi) {
// pengecekannya di sini
} }

Cara yang kedua ialah dengan menggunakan method


onOptionsItemSelected(). Memanfaatkan obyek MenuItem yang dikirim
ke method ini, kita bisa menentukan item apa yang diklik dengan
memeriksa nilai getItemId(). Method ini mengembalikan ID unik dari
atribut id di menu XML sehingga kita bisa melakukan aksi tertentu saat
salah satu id menu dipilih:
Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
III-7

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle presses on the action bar items
switch (item.getItemId()) {
case R.id.miCompose:
composeMessage();
return true;
case R.id.miProfile:
showProfileView();
return true;
default:
return super.onOptionsItemSelected(item);
} }

Mengenal ToolBar
ToolBar dipekenalkan saat Android Lollipop versi API 21 dirilis
sebagai penerus ActionBar. ToolBar adalah sebuah ViewGroup yang
dapat ditempatkan di mana saja di dalam sebuah layout. Tampilan
ToolBar dapat diatur dengan lebih mudah dibanding ActionBar.

Gambar 3.4 Tampilan Toolbar


ToolBar bekerja dengan sangat baik untuk aplikasi yang
menargetkan API 21 ke atas. Meskipun begitu, Android telah
memperbarui AppCompat support libraries sehingga ToolBar dapat
dipakai di sistem operasi Android versi lama.
III.2 Langkah – Langkah Praktikum
1. Buka aplikasi Android Studio.
2. Tulis Source Code.
3. Buka Comfile pada Android Studio.
III.3 Tugas 1 : Membuat tampilan NavigationBar
Source code activity_biodata.xml :
<TextView android:id="@+id/textnama"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="40dp"
android:layout_marginTop="68dp" android:text="Nama
:" android:textSize="15dp"

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
III-8

android:textColor="#000000"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<EditText android:id="@+id/input_nama"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginTop="52dp"
android:layout_marginEnd="75dp" android:ems="10"
android:inputType="textPersonName" android:text=""
android:textColor="#000000" android:textSize="15dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<TextView android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="40dp"
android:layout_marginTop="120dp" android:text="NIM
:" android:textSize="15dp"
android:textColor="#000000"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<EditText android:id="@+id/input_nim"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginTop="108dp"
android:layout_marginEnd="75dp" android:ems="10"
android:inputType="textPersonName" android:text=""
android:textColor="#000000" android:textSize="15dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<TextView android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="40dp"
android:layout_marginTop="180dp"
android:text="Jurusan :" android:textSize="15dp"
android:textColor="#000000"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<EditText android:id="@+id/input_jur"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginTop="164dp"
android:layout_marginEnd="75dp" android:ems="10"
android:inputType="textPersonName" android:text=""
android:textColor="#000000" android:textSize="15dp"

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
III-9

app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<TextView android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="40dp"
android:layout_marginTop="240dp"
android:text="Angkatan :" android:textSize="15dp"
android:textColor="#000000"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<EditText android:id="@+id/input_ang"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginTop="224dp"
android:layout_marginEnd="75dp" android:ems="10"
android:inputType="textPersonName" android:text=""
android:textColor="#000000" android:textSize="15dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<Button android:id="@+id/tampil"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginTop="284dp"
android:layout_marginEnd="145dp"
android:text="TAMPILKAN" android:textColor="#000000"
android:textSize="15dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<TextView android:id="@+id/textView7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginTop="356dp"
android:layout_marginEnd="320dp" android:text="Nama
:" android:textColor="#000000"
android:textSize="15dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.11"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<TextView android:id="@+id/textView8"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginTop="408dp"
android:layout_marginEnd="330dp" android:text="NIM

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
III-10

:" android:textColor="#000000"
android:textSize="15dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.106"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<TextView android:id="@+id/textView9"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginTop="460dp"
android:layout_marginEnd="302dp"
android:text="Jurusan :" android:textColor="#000000"
android:textSize="15dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.114"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<TextView android:id="@+id/textView10"
android:layout_width="61dp"
android:layout_height="17dp"
android:layout_alignParentEnd="true"
android:layout_marginTop="508dp"
android:layout_marginEnd="300dp"
android:text="Angkatan :"
android:textColor="#000000" android:textSize="15dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.114"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<TextView android:id="@+id/output_nama"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginTop="356dp"
android:layout_marginEnd="90dp"
android:layout_marginBottom="230dp" android:text=""
android:textColor="#000000" android:textSize="15dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.431"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<TextView android:id="@+id/output_nim"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginTop="32dp"
android:layout_marginEnd="219dp"

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
III-11

android:layout_marginBottom="175dp" android:text=""
android:textColor="#000000" android:textSize="15dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.416"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/output_nama"
/>

<TextView android:id="@+id/output_jur"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginTop="32dp"
android:layout_marginEnd="156dp"
android:layout_marginBottom="123dp" android:text=""
android:textColor="#000000" android:textSize="15dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.43"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/output_nim" />

<TextView android:id="@+id/output_ang"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/output_jur"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginTop="-100dp"
android:layout_marginEnd="244dp"
android:layout_marginBottom="75dp" android:text=""
android:textColor="#000000" android:textSize="15dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.43"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/output_jur" />

Source code Biodata.java :

public class Biodata extends AppCompatActivity {

@Override protected void onCreate(Bundle


savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_biodata);
final EditText nama =
(EditText)findViewById(R.id.input_nama);
final EditText nim =
(EditText)findViewById(R.id.input_nim); final
EditText jurus =
(EditText)findViewById((R.id.input_jur));
final EditText ang =
(EditText)findViewById(R.id.input_ang);

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
III-12

final TextView nama_t =


(TextView)findViewById(R.id.output_nama);
final TextView nim_t =
(TextView)findViewById(R.id.output_nim);
final TextView jurus_t =
(TextView)findViewById(R.id.output_jur);
final TextView ang_t =
(TextView)findViewById(R.id.output_ang);
final Button tampilDia =
(Button)findViewById(R.id.tampil);
tampilDia.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String na = nama.getText().toString();
nama_t.setText(na);
String ni = nim.getText().toString();
nim_t.setText(ni);
String ju = jurus.getText().toString();
jurus_t.setText(ju);
String an = ang.getText().toString();
ang_t.setText(an); } }); } }

Gambar 3.5 Tampilan hasil dari navigasi

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
III-13

Gambar 3.6 Tampilan hasil dari activity biodata


Analisa :
Pada program diatas merupakan program untuk menampilkan
navigation bar. Pada saat pertama kali membuat program android, kita pilih
create Navigation Drawer Activity. Lalu isian pada layout sidebar kita ganti
sesuai yang dibutuhkan. Pada layout home, kita isi dengan fungsi untuk
menampilkan biodata diri berdasarkan inputan yang kita masukkan pada
halaman home.

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
III-14

III.4 Tugas Rumah 1 : Mengimplementasikan Tampilan Pada Navbar


Source Code activity_main_drawer.xml :
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:showIn="navigation_view">
<group android:checkableBehavior="single">
<item
android:id="@+id/nav_home"
android:icon="@drawable/ic_menu_camera"
android:title="@string/menu_home" />
<item
android:id="@+id/nav_gallery"
android:icon="@drawable/ic_menu_gallery"
android:title="Biodata" />
<item
android:id="@+id/nav_slideshow"
android:icon="@drawable/ic_menu_slideshow"
android:title="Perhitungan Segitiga" />
</group>
</menu>

Source Code fragment_gallery.xml :


<TextView
android:id="@+id/textView16"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.325"
app:layout_constraintStart_toStartOf="parent" />

<EditText
android:id="@+id/in_nama"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.772"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.116" />

<EditText
android:id="@+id/in_nim"
android:layout_width="wrap_content"
Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
III-15

android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.772"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.208" />

<EditText
android:id="@+id/in_jurusan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.772"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.294" />

<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="NIM"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.129"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.226" />

<Button
android:id="@+id/btn_tampilkan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TAMPILKAN"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.853"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.374" />

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
III-16

<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Jurusan"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.133"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.307" />

<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Nama"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.134"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.133" />

<TextView
android:id="@+id/textView10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Nama"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.128"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.476" />

<TextView
android:id="@+id/out_jurusan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="........"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.401"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.625" />

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
III-17

<TextView
android:id="@+id/out_nama"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="........"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.401"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.476" />

<TextView
android:id="@+id/out_nim"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="........"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.396"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.547" />

<TextView
android:id="@+id/textView13"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Jurusan"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.13"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.625" />

<TextView
android:id="@+id/textView14"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="NIM"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.122"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
III-18

app:layout_constraintVertical_bias="0.547" />
</androidx.constraintlayout.widget.ConstraintLayout>

Source Code string.xml :


<resources>
<string name="app_name">tugas2pratikum</string>
<string name="navigation_drawer_open">Open navigation
drawer</string>
<string name="navigation_drawer_close">Close navigation
drawer</string>
<string name="nav_header_title">Android Studio</string>
<string
name="nav_header_subtitle">android.studio@android.com</string>
<string name="nav_header_desc">Navigation header</string>
<string name="action_settings">Settings</string>

<string name="menu_home">Home</string>
<string name="menu_gallery">Biodata</string>
<string name="menu_slideshow">Segitiga</string>
<string name="menu_tools">Tools</string>
<string name="menu_share">Share</string>
<string name="menu_send">Send</string>
</resources>

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
III-19

Gambar 3.7 Tampilan pada Navbar

Gambar 3.8 Tampilan Halaman Biodata Melalui Navbar

Analisa :
Untuk membuat tampilan Navigation Bar menggunakan menu Activity
Navigation Drawer. Tampilan menu navigation bar yaitu biodata dan
segitiga di konfigurasi di dalam file activity_main_drawer pada
android:tittle dan untuk action barnya dalam string.xml
File Fragment_gallery.xml ini berisikan konfigurasi tampilan -
tampilan seperti textview, editview dll. Fragment ini terhubung oleh tittle
yang ada pada navigation bar menu melalui id dan nama fragment, Ketikan
Menu Navigation bar Biodata di klik maka langsung menuju ke halaman
ini.
III.5 Kesimpulan
1. Mahasiswa dapat memahami konsep dasar Navigation dan Action Bar
2. Mahasiswa dapat mengimplementasikan pembuatan navigation pada
android
3. Mahasiswa dapat membuat action bar sederhana pada android studio

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
V-1

BAB IV
RECYCLERVIEW
JumlahPertemuan : 2 x 60 menit

TujuanPraktikum : 1. Mampu memahami dasar-dasar pemrograman


recycler view
2. Mampu mengimplementasikan konsep recycler view
3. Mampu membuat aplikasi sederhana berisikan
recycler view
Alat / bahan : 1. Laptop
2. Smartphone
3. Modul Praktikum

IV.1 Landasan Teori


Untuk menampilkan data dalam bentuk list, biasanya kita menggunakan
ListView misalnya untuk menampilkan data-data yang berasal dari kontak di
device pengguna ke layar. Sangat sederhana, tetapi sangat berarti. Mengapa ?
Pada dasarnya interaksi umum antara pengguna dengan aplikasi dalam
menampilkan data dalam jumlah yang banyak adalah dengan menggunakan
list yang bisa di scroll ke atas dan ke bawah.
ListView menjadi komponen pertama yang mengakomodasi hal tersebut,
namun semenjak Google merilis pendekatan desain bernama material design,
RecyclerView menjadi pilihan pertama yang harus developer gunakan.
Gambar 4.1 merupakan contoh penggunaan RecyclerView. Anda masih bisa
menggunakan kedua komponen tersebut secara berdampingan dalam satu
aplikasi.

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
V-2

Gambar 4.1 Contoh penggunaan RecyclerView


Secara definisi RecyclerView adalah sebuah komponen tampilan (widget)
yang lebih canggih ketimbang pendahulunya ListView dan bersifat lebih
fleksibel. Yang paling penting adalah RecyclerView memiliki kemampuan
untuk menampilkan data secara efisien dalam jumlah yang besar. Terlebih
jika Anda memiliki koleksi data yang tiap elemennya mampu berubah-ubah
sewaktu dijalankan (runtime) karena interaksi pengguna atau karena adanya
pengaruh dari jaringan internet.

RecyclerView

Layout Manager Adapter Dataset

Gambar 4.2 Komponen pembentuk RecyclerView

Gambar 4.2 akan menjelaskan beberapa komponen yanga harus Anda


tahu sebelum menggunakan RecyclerView.
1. RecyclerView dan LayoutManager : Komponen user interface yang
bertugas untuk menampilkan data set yang dimiliki. Di dalamnya terdapat
LayoutManager yang mana akan mengatur posisi tampilan data baik itu
secara List (vertikal), Grid (baris dan kolom) atau StaggeredGrid (Grid
yang memiliki susunan tak seragam/tak beraturan) .

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
V-3

2. Adapter : Komponen yang akan mengatur bagaimana tampilan data set ke


dalam RecyclerView. Disinilah terjadi proses pengisian tampilan
(ViewInflate) dari file layout xml untuk tiap elemen dari set data yang
dimiliki sebelum dipasang (bind) ke dalam RecyclerView.
3. Dataset : Kumpulan data yang dimiliki dan ingin ditampilkan, bias berupa
Array, List maupun objek map.
4. Item Animator : Ini yang special, kita bisa set animasi untuk tiap item di
dalamnya bahkan bias membuat kustomisasi animasi. Contoh animasi
yang umum seperti penambahan (add) dan penghapusan (removal) item.
Langkah-langkah mengimplementasikan RecyclerView sebagai berikut :
1. Tambahkan dependencies komponen RecyclerView pada file build.gradle
(modul:app) level modul.
2. Tambhakan objek RecyclerView di file layout xml dari
Activity/Fragment.
3. Definisikan model kelas yang akan digunakan sebagai data source.
4. Buat sebuah kelas adapter yang inherit ke RecyclerView.Adapter dari
ViewHolder untuk menampilkan tiap elemen data.
5. Definisikan objek RecyclerView berikut dengan bentuk yang diinginkan
(bisa dalam bentuk list, grid atau staggered) dan selanjutnya pasang
objek adapter (binding) agar bisa menampilkan koleksi data ke dalam
RecyclerView.
IV.2 Langkah – Langkah Praktikum
1. Buka aplikasi Android Studio.
2. Tulis Source Code.
3. Buka Comfile pada Android Studio.
IV.3 Tugas 1 : Membuat RecyclerView sederhana
Source code activity_main.xml :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
V-4

android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">

<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

</LinearLayout>

Source code item_mahasiswa.xml :


<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView

xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-
auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
card_view:cardCornerRadius="5dp"
card_view:cardElevation="3dp"
card_view:cardUseCompatPadding="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="5dp"
android:layout_margin="5dp">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="5dp"
android:layout_margin="5dp">
<TextView
android:id="@+id/txt_nama_mahasiswa"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/txt_nim_mahasiswa"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/txt_angkatan_mahasiswa"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/txt"
android:layout_width="match_parent"

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
V-5

android:layout_height="wrap_content"/>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>

Source code MainActivity.java :


package com.example.recyclerview;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.os.Bundle;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

private RecyclerView recyclerView;


private MahasiswaAdapter adapter;
private ArrayList<Mahasiswa> mahasiswaArrayList;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

addData();

recyclerView =
(RecyclerView)findViewById(R.id.recyclerview);

adapter = new MahasiswaAdapter(mahasiswaArrayList);

RecyclerView.LayoutManager layoutManager = new


LinearLayoutManager(MainActivity.this);

recyclerView.setLayoutManager(layoutManager);

recyclerView.setAdapter(adapter);
}

private void addData() {


mahasiswaArrayList = new ArrayList<>();
mahasiswaArrayList.add(new Mahasiswa("Kevin Merico
Setiawan", "1718128", "2017"));
mahasiswaArrayList.add(new Mahasiswa("Daniel Eka
Wijaya", "1718129", "2017"));
mahasiswaArrayList.add(new Mahasiswa("Farhandi Ardi
Wibowo", "1718131", "2017"));
mahasiswaArrayList.add(new Mahasiswa("Abi Tresna
Utama", "1718079", "2017"));

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
V-6

}
}

Source code MahasiswaAdapter.java :


package com.example.recyclerview;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;

class MahasiswaAdapter extends


RecyclerView.Adapter<MahasiswaAdapter.MahasiswaViewHolder> {

private ArrayList<Mahasiswa> dataList;

public MahasiswaAdapter(ArrayList<Mahasiswa> dataList) {


this.dataList = dataList;
}

@NonNull
@Override
public MahasiswaAdapter.MahasiswaViewHolder
onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
{
LayoutInflater layoutInflater =
LayoutInflater.from(parent.getContext());
View view =
layoutInflater.inflate(R.layout.item_mahasiswa, parent,
false);
return new MahasiswaViewHolder(view);
}

public void onBindViewHolder(MahasiswaViewHolder holder,


int position) {

holder.txtNama.setText(dataList.get(position).getNama());

holder.txtNpm.setText(dataList.get(position).getNim());

holder.txtNoHp.setText(dataList.get(position).getAngkatan())
;
}

@Override
public int getItemCount() {
return (dataList != null) ? dataList.size() : 0;
}

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
V-7

public class MahasiswaViewHolder extends


RecyclerView.ViewHolder{
private TextView txtNama, txtNpm, txtNoHp;

public MahasiswaViewHolder(View itemView) {


super(itemView);
txtNama = (TextView)
itemView.findViewById(R.id.txt_nama_mahasiswa);
txtNpm = (TextView)
itemView.findViewById(R.id.txt_nim_mahasiswa);
txtNoHp = (TextView)
itemView.findViewById(R.id.txt_angkatan_mahasiswa);
}
}
}

Source code Mahasiswa.java :


package com.example.recyclerview;

class Mahasiswa {
private String nama, nim, angkatan;
public Mahasiswa(String nama, String nim, String
angkatan)
{
this.nama = nama;
this.nim = nim;
this.angkatan = angkatan;
}

public String getNama() {return nama;}


public void setNama(String nama) {this.nama = nama;}

public String getNim() {return nim;}


public void setNim(String nim) {this.nim = nim;}

public String getAngkatan() {return angkatan;}


public void setAngkatan(String angkatan) {this.angkatan
= angkatan;}
}

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
V-8

Gambar 4.3 Tampilan hasil running program recycler view


Analisa :

Program diatas merupakan salah satu penerapan RecyclerView. Pada


program diatas, komponen yang dibutuhkan adalah kelas xml main, item
mahasiswa, kelas mahasiswa.java, mahasiswaadapter.java, dan
mainactivity.java. Pada kelas xml main, terdapat 1 pendeklarasian widget
recycler view yang memiliki id recyclerview, dimana id tersebut nantinya
memanggil komponen yang ada pada kelas item_mahasiswa.xml. pada kelas
item_mahasiswa terdapat layout untuk penempatan item yang akan
ditampilkan.
Pada main activity terdapat fungsi untuk menambahkan item seperti
nama, nim angkatan. Pada kelas mahasiswa terdapat pendeklarasian setter
dan getter. Pada kelas mahasiswa_adapter terdapat pendeklarasian item
yang akan ditampilkan.
IV.4 Tugas Rumah 1 : Menerapkan RecyclerView pada aplikasi dilengkapi
dengan foto pada tiap list
Source Code activity_main.xml :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</RelativeLayout>

Source Code item_profile.xml :


<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
V-9

card_view:cardCornerRadius="5dp"
card_view:cardElevation="3dp"
card_view:cardUseCompatPadding="true">

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation = "vertical"
android:padding="6dp">
<ImageView
android:id="@+id/profile_data"
android:layout_width="74dp"
android:layout_height="66dp"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginStart="8dp"
android:layout_marginTop="6dp"
android:src="@drawable/ic_launcher_background"/>
<TextView
android:id="@+id/txt_nama"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignTop="@id/profile_data"
android:layout_marginStart="7dp"
android:layout_marginTop="0dp"
android:layout_toEndOf="@id/profile_data"
/>
<TextView
android:id="@+id/txt_kerja"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/txt_nama"
android:layout_marginStart="7dp"
android:layout_marginTop="5dp"
android:layout_toEndOf="@id/profile_data"/>
<TextView
android:id="@+id/txt_usia"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/txt_kerja"
android:layout_marginStart="7dp"
android:layout_marginTop="5dp"
android:layout_toEndOf="@id/profile_data"/>
</RelativeLayout>
</androidx.cardview.widget.CardView>

Source Code Profile.Java :


package com.example.tugas3pratikum;
import android.graphics.drawable.Drawable;
import android.media.Image;
import android.net.Uri;
import android.widget.ImageView;
import java.util.ArrayList;

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
V-10

public class Profile {


private String nama, kerja, usia;
private Drawable picture;
public Profile (String nama, String kerja, String usia,
Drawable picture )
{
this.nama = nama;
this.kerja = kerja;
this.usia = usia;
this.picture = picture;
}
public Profile (ArrayList<Profile> ProfileArrayList)
{
}
public String getNama() {
return nama;
}
public void setNama(String nama) {
this.nama = nama;
}
public String getKerja() {
return kerja;
}
public void setKerja(String kerja) {
this.kerja = kerja;
}
public String getUsia() {
return usia;
}
public void setUsia(String usia) {
this.usia = usia;
}
public Drawable getPicture() {
return picture;
}
public void setPicture(Drawable picture) {
this.picture = picture;
}
}

Source Code ProfileAdapter.Java :


package com.example.tugas3pratikum;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
class ProfileAdapter extends
Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
V-11

RecyclerView.Adapter<ProfileAdapter.ProfileViewHolder>{
private ArrayList<Profile> dataList;
public ProfileAdapter(ArrayList<Profile> dataList)
this.dataList = dataList;
}
@NonNull
@Override
public ProfileAdapter.ProfileViewHolder
onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
{
LayoutInflater layoutInflater =
LayoutInflater.from(parent.getContext());
View view =
layoutInflater.inflate(R.layout.item_profile, parent,
false);
return new ProfileViewHolder(view);
}
@Override
public void onBindViewHolder(ProfileViewHolder holder,
int position) {
holder.txtnama.setText(dataList.get(position).getNama());
holder.txtkerja.setText(dataList.get(position).getKerja());
holder.txtusia.setText(dataList.get(position).getUsia());
holder.picture_data.setImageDrawable(dataList.get(position).
getPicture());
}
@Override
public int getItemCount() {
return (dataList != null) ? dataList.size() : 0;
}
public class ProfileViewHolder extends
RecyclerView.ViewHolder {
TextView txtnama;
TextView txtkerja;
TextView txtusia;
ImageView picture_data;
public ProfileViewHolder(View itemView) {
super(itemView);
txtnama = (TextView)
itemView.findViewById(R.id.txt_nama);
txtkerja = (TextView)
itemView.findViewById(R.id.txt_kerja);
txtusia = (TextView)
itemView.findViewById(R.id.txt_usia);
picture_data = (ImageView)
itemView.findViewById(R.id.profile_data);
}

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
V-12

}
}

Source Code MainActivity.Java :


package com.example.tugas3pratikum;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private ProfileAdapter adapter;
private ArrayList<Profile> profileArrayList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
addData();
recyclerView =
(RecyclerView)findViewById(R.id.recyclerView);
adapter = new ProfileAdapter(profileArrayList);
RecyclerView.LayoutManager layoutManager = new
LinearLayoutManager(MainActivity.this);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(adapter);
}
private void addData() {

profileArrayList = new ArrayList<>();

profileArrayList.add(new Profile("Tareh",
"Wirausaha", "24", getDrawable(R.drawable.orang)));

profileArrayList.add(new
Profile("Dodit","Artis","32",
getDrawable(R.drawable.orang2)));

profileArrayList.add(new
Profile("Budi","Pemadam","27",getDrawable(R.drawable.orang3)
));

profileArrayList.add(new
Profile("William","Polisi","22",getDrawable(R.drawable.orang
4)));

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
V-13

Gambar 4.4 Tampilan hasil running program recycler view dengan tambahan
ikon profil pada tiap list

Analisa :
File activity_main diatas mempunyai fungsi untuk menampilkan fungsi
recycler view ke dalam bentuk array list dan memberikan inisialisasi variable
id recyclerView, yang mana akan digunakan untuk memanggil di
MainActivity
File item_profile diatas, mempunyai fungsi mendesain komponen -
komponen apa saja yang akan digunakan, seperti textview di tandai dengan
perintah <TextView> untuk mengisikan Nama, Kerja, dan Usia, dan
Imageview digunakan untuk memanggil file gambar ditandai dengan perintah
<ImageView>. File Item_profile.xml ini nantinya akan di tampilkan pada file
MainActivity.
File Profile.java diatas berisikan variable yang diambil pada file
item_profile.xml. Pada file Profile.java ini mempunyai method setter dan
method getter yang digunakan untuk mengisi value dan mengembalikan nilai
value tersebut untuk ditampilkan.
Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
V-14

File diatas yaitu ProfileAdapter.java mempunyai fungsi sebagai


penghubung antara file item_profile.xml dan Profile.java. File adapter ini
digunakan untuk menampilkan data - data seperti Nama, Kerja, Usia dan File
Gambar ke dalam satu layout dan Data ditampilkan ke dalam bentuk ListView
berupa array list.
Source Code pada file MainActivity.java ini mempunyai fungsi untuk
menampilkan isi konten Recycler View dan file item_profile.xml. Data yang
ditampilkan pada MainActivity.java ini adalah Nama,Kerja, Usia dan Gambar
kedalam bentuk ListView.
IV.5 Kesimpulan
1. Mahasiswa dapat memahami konsep dasar RecyclerView
2. Mahasiswa dapat mengimplementasikan pembuatan recyclerview pada
android
3. Mahasiswa dapat membuat recyclerview sederhana pada android studio

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
V-1

BAB V
BACKGROUND PROCESS
JumlahPertemuan : 2 x 60 menit

TujuanPraktikum : 1. Mampu memahami dasar-dasar pemrograman


background proccess
2. Mampu mengimplementasikan konsep background
proccess
3. Mampu membuat aplikasi sederhana berisikan
background proccess
Alat / bahan : 1. Laptop
2. Smartphone
3. Modul Praktikum

V.1 Landasan Teori


A. Service
Kita telah belajar bagaimana mengenai Activity dan implementasinya.
Activity dan Fragment adalah dua komponen yang memberikan pengalaman
kepada praktikan secara langsung. Praktikan dapat melihat dan berinteraksi
diatasnya.
Service berada pada sisi yang lain. Komponen ini tidak memiliki
antarmuka dan bahkan pengguna tidak akan tahu bagaimana dia bekerja.
Pengalaman yang diberikan oleh service hanya berupa proses yang tidak
terlihat secara background untuk melakukan berbagai macam proses yang
memakan waktu lama. Walaupun berjalan secara background, pada dasarnya
Service dan komponen Android lainnya berjalan pada suatu proses dan thread
yang sama yaitu mainthread atau UIThread. Bekerja secara background
bukan berarti service bisa bekerja secara Asynchronous, akan tetapi tetap

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
V-2

membutuhkan thread terpisah jika kita ingin melakukan proses yang bersifat
komputasi intensif atau yang memakan waktu.
Contoh pemanfaatan Service sudah banyak sekali, beberapa diantarnya :
1. Aplikasi social media atau aplikasi yang memiliki kemampuan untuk
menerima pushnotification, pasti memiliki sebuah service yang berjalan
dalam posisi stand by untuk selalu menerima pesan yang masuk atau juga
untuk mendownload file.
2. Aplikasi chatting juga membutuhkan service untuk melakukan
pengiriman dan menerima pesan yang dikirimkan oleh pengguna.
3. Aplikasi pendengar musik juga melakukan hal yang sama. Untuk
memberikan pengalaman yang lebih baik kepada pengguna, aplikasi
pendengar musik biasanya meletakkan proses streaming atau memainkan
musik di komponen Service dengan tetap mempertahankan integrasi
dengan komponen lain misalnya seperti notifikasi.
Secara umum terdapat dua bentuk dari Service, yaitu :
1. Started Service
Service berjenis ini adalah tipe yang dijalankan oleh komponen lain,
misal Activity. Sekali dijalankan, service ini akan berjalan selama belum
dimatikan atau proses yang dijalankan selesai. Walaupun komponen
yang lain di stop atau dimatikan oleh Android, sistem atau Activity sudah
di destroy, Service akan tetap berjalan. Umunya penggunaan service ini
adalah untuk melakukan proses yang tidak memberikan nilai balik ke
komponen yang memanggil. Contohnya, adalah mendownload atau
mengupload file dari dan ke server.
2. Bound Service
Service jenis ini merupakan tipe service yang dijalankan oleh komponen
lain, namun saling mengikat satu sama lain. Hubungan yang terjadi antar
kedua komponen tersebut seperti client-server. Bisa saling menerima
hasil dan menerima request yang ada. Pada service ini dimungkinkan
terjadi proses IPC (Interprocess Communication). Service ini akan tetap

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
V-3

hidup secara background selama masih ada komponen lain yang


mengikatnya. Jika tidak, maka Service akan dimatikan oleh sistem.
Aplikasi pemutar musik merupakan salah satu jenis aplikasi yang
mengimplementasikan Service jenis ini.
Pada bagian ini kita sepenuhnya membahas Service berjenis started. Di
tipe Service tersebut akan dibagi menjadi dua bagian dalam implementasinya,
yaitu :
1. Kelas Service yang inherit langsung kepada kelas Service.
Ketika sebuah kelas java inherit ke Service ingin menjalankan proses
yang memakan waktu lama misal mendownload file, maka diharuskan
membuat thread terpisah agar tidak memblok UIThread yang ada.
Service ini akan selalu hidup di background selama tidak ada komponen
yang memanggil stopService() atau sistem yang mematikan jika
dibutuhkan memori tambahan untuk menjalankan aplikasi lain.
2. Kelas Service yang inherit ke Intent Service.
Ini adalah kelas yang sangat memudahkan hidup kita. Dia bersifat fire
and forget, ketika ia telah menyelesaikan tugasnya, ia akan mematikan
dirinya.
Praktikan akan belajar mengimplementasikan kedua tipe service tersebut
pada bab ini.
Poin-poin penting lain tentang Service diantaranya adalah :
1. Setiap kelas java akan dinyatakan sebagai sebuah service apabila kelas
tersebut menerapkan inherit/extends ke kelas Service atau IntentService.
2. Service memiliki lifecycle-nya sendiri dan bergantung kepada tipe service
apa yang digunakan, Started atau BoundService.
Untuk menjalankan Service dari komponen lain seperti Activity, cukup
menggunakan startService(Intent) dengan objek intent yang dikirimkan.
Sebaiknya untuk mematikan/stop service terdapat dua cara yaitu :
stopService(Intent) dijalankan dari komponen yang memanggil dan
stopSelf() dari kelas Service itu sendiri.

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
V-4

B. Broadcast Receiver
Ketika mengembangkan sebuah aplikasi di Android, adakalanya kita
butuh menjalankan suatu proses tertentu ketika sebuah proses lain telah
terjadi. Misal, kita ingin menjalankan sesuatu ketika device Android sudah
selesai booting dengan sempurna. Kemampua ini dapat kita manfaatkan
untuk memberi pengalaman yang lebih baik. Disinilah komponen broadcast
receiver berperan penting. Menurut definisinya, broadcast receiver adalah
cara sederhana untuk menindaklanjuti sebuah broadcast message yang
dipancarkan oleh dirinya sendiri, aplikasi lain atau sistem Android.
Sementara itu, broadcast message adalah pesan yang akan dipancarkan
melalui objek intent. Saat ini banyak aplikasi yang menggunakan validasi
pengguna dengan mengirimkan kode verifikasi melalui SMS. Tanpa disadari,
ketika SMS tersebut masuk dan ia berasal dari provider aplikasi, maka akan
ada komponen dari aplikasi lain yang akan menindaklanjuti dan memproses
pesan tadi. Misalnya, dengan melakukan konfirmasi proses validasi tersebut
dengan cara menghubungi sebuah API di server. Interaksi antara
BroadcastReceiver dengan Android System.
Pada materi kali ini praktikan akan belajar bagaimana
mengimplementasikan dua mekanisme umum dalam memanfaatkan
komponen BroadcastReceiver, yaitu :
a. Implementasi BroadcastReceiver untuk menerima event yang
dibroadcast oleh sistem Android. Praktikan akan praktik bagaimana
menerima broadcast ketika ada SMS yang masuk.
b. Implementasi BroadcastReceiver untuk komunikasi antar aplikasi.

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
V-1

V.2 Langkah – Langkah Praktikum


1. Buka aplikasi Android Studio.
2. Tulis Source Code.
3. Buka Comfile pada Android Studio.

V.3 Tugas 1 : Membuat Background Proccess Alarm sederhana


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

xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical"
android:gravity="center">

<TextView
android:id="@+id/txt_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TIME"
android:textSize="20dp"
android:textColor="#288EBD"
android:layout_marginTop="-100dp"/>
<Button
android:id="@+id/btn_open"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Open Time Picker"
android:layout_marginTop="30dp"
android:onClick="onClick"/>
<Button
android:id="@+id/btn_cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="cancel"
android:layout_marginTop="30dp"/>
</LinearLayout>

Source code NotificationHelper.java :


package com.example.servicenbackgroundreceiver;

import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.Intent;
Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
V-2

import android.os.Build;

import androidx.core.app.NotificationCompat;

class NotificationHelper extends ContextWrapper {

private static final String channel1id = "channel1ID";


private static final String channel1name = "Channel 1";
private NotificationManager mManager;

public NotificationHelper(Context base) {


super(base);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
createChannels();
}
}

public void createChannels(){


NotificationChannel channel_1 = new
NotificationChannel(channel1id, channel1name,
NotificationManager.IMPORTANCE_DEFAULT);
channel_1.enableLights(true);
channel_1.enableVibration(true);
channel_1.setLightColor(R.color.colorPrimary);

channel_1.setLockscreenVisibility(Notification.VISIBILITY_PR
IVATE);

getManager().createNotificationChannel(channel_1);
}

public NotificationManager getManager(){


if (mManager == null){
mManager = (NotificationManager)
getSystemService(Context.NOTIFICATION_SERVICE);
}

return mManager;
}

public NotificationCompat.Builder
getChannel_1Notification(){
return new
NotificationCompat.Builder(getApplicationContext(),
channel1id)
.setSmallIcon(R.drawable.ic_satu)
.setContentTitle("Get Work")
.setContentText("it's about late...")

}
}

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
V-3

Source code AlertReceiver.java :


<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.servicenbackgroundreceiver">

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action
android:name="android.intent.action.MAIN" />

<category
android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".AlertReceiver"/>
</application>

</manifest>

Source code MainActivity.java :


package com.example.servicenbackgroundreceiver;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.app.TimePickerDialog;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.TimePicker;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.NotificationCompat;
import androidx.fragment.app.DialogFragment;

import java.text.DateFormat;
import java.util.Calendar;

public class MainActivity extends AppCompatActivity

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
V-4

implements TimePickerDialog.OnTimeSetListener,
View.OnClickListener {
private TextView txt;
Button button, button_cencel;
private NotificationHelper notificationHelper;

Calendar c;
int jam, menit;

@Override
protected void onCreate(final Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

c = Calendar.getInstance();
jam = c.get(Calendar.HOUR_OF_DAY);
menit = c.get(Calendar.MINUTE);

notificationHelper = new NotificationHelper(this);

txt = (TextView) findViewById(R.id.txt_time);

button = (Button) findViewById(R.id.btn_open);


button.setOnClickListener(this);

button_cencel = (Button)
findViewById(R.id.btn_cancel);
button_cencel.setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View v) {
cancelAlarm();
}
});
}

@Override
public void onTimeSet(TimePicker view, int hourOfDay,
int minute) {
c.set(Calendar.HOUR_OF_DAY, hourOfDay);
c.set(Calendar.MINUTE, minute);
c.set(Calendar.SECOND, 0);

updateTime(c);
startAlarm(c);
}

private void updateTime(Calendar c) {


String timeText = "Alarm Set For : ";
timeText +=
DateFormat.getTimeInstance(DateFormat.SHORT).format(c.getTim
e());

txt.setText(timeText);
}

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
V-5

private void startAlarm(Calendar c) {


AlarmManager alarmManager = (AlarmManager)
getSystemService(Context.ALARM_SERVICE);
Intent a = new Intent(this, AlertReceiver.class);
PendingIntent b = PendingIntent.getBroadcast(this,
1, a, 0);

alarmManager.setExact(AlarmManager.RTC_WAKEUP,
c.getTimeInMillis(), b);
}

private void cancelAlarm() {


AlarmManager alarmManager = (AlarmManager)
getSystemService(Context.ALARM_SERVICE);
Intent a = new Intent(this, AlertReceiver.class);
PendingIntent b = PendingIntent.getBroadcast(this,
1, a, 0);

alarmManager.cancel(b);
txt.setText("Alarm Canceled");
}

@Override
public void onClick(View v) {
DialogFragment timePicker = new
TimePickerFragment();
timePicker.show(getSupportFragmentManager(), "Time
Picker");
}

public void kirimnotif(String title, String message){


NotificationCompat.Builder nb =
notificationHelper.getChannel_1Notification();
notificationHelper.getManager().notify(1,
nb.build());

Source code TimePickerFragment.java :


package com.example.servicenbackgroundreceiver;

import android.app.Dialog;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.text.format.DateFormat;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.DialogFragment;

import java.util.Calendar;

public class TimePickerFragment extends DialogFragment {


Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
V-6

Calendar c;
int jam, menit;

@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle
savedInstanceState)
{
c = Calendar.getInstance();
jam = c.get(Calendar.HOUR_OF_DAY);
menit = c.get(Calendar.MINUTE);

return new TimePickerDialog(getActivity(),


(TimePickerDialog.OnTimeSetListener) getActivity(),
jam,menit, DateFormat.is24HourFormat(getActivity()));
}
}

Gambar 5.1 Tampilan pada saat mengeset waktu alarm

Gambar 5.2 Tampilan saat ada notifikasi alarm


Analisa :
Pada program diatas menggunakan konsep service dan background
receiver. Penerapan yang digunakan aplikasi alarm dan notifikasi ketika
alarm nyala. Kelas yang dibutuhkan untuk membuat alarm seperti program
diatas adalah activity main, notification helper, alert receiver, dan time
picker fragment. Pada kelas notification helper berisi program yang berjalan
Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
V-7

pada bilah notifikasi android. Pada kelas ini digunakan untuk menampilkan
alert ketika alarm berbunyi. Pada kelas timepickerfragment, berisi program
untuk mengeset alarm.
V.4 Tugas Rumah 1 : Membuat Background Proccess dengan Intent
Source Code activity_main.xml :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorPrimary"
android:gravity="center"
android:orientation="vertical"
tools:context=".MainActivity">

<TextView
android:id="@+id/tv_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TIME"
android:textColor="#FFFF"
android:textSize="20sp" />

<Button
android:id="@+id/btn_buka"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:text="BUKA TIME PICKER" />

<Button
android:id="@+id/btn_batal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="BATAL" />
</LinearLayout>

Source Code NotificationHelper.Java :


public class NotificationHelper extends ContextWrapper {
private static final String channelId = "ChannelId";
private static final String channelName = "Channel 1";
private NotificationManager notificationManager;

public NotificationHelper(Context base) {


super(base);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
createChannel();
}
}
Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
V-8

private void createChannel(){


NotificationChannel notificationChannel = new
NotificationChannel(channelId,channelName,NotificationManager
.IMPORTANCE_DEFAULT);
notificationChannel.enableLights(true);
notificationChannel.enableVibration(true);

notificationChannel.setLightColor(R.color.colorPrimaryDark);

getManager().createNotificationChannel(notificationChannel);
}
public NotificationManager getManager(){
if(notificationManager == null){
notificationManager =
(NotificationManager)getSystemService(Context.NOTIFICATION_SE
RVICE);
}
return notificationManager;
}
public NotificationCompat.Builder
getChannel_Notification(){
Intent notifyIntent = new Intent(this,
MainActivity.class);
PendingIntent notifyPendingIntent =
PendingIntent.getActivity( this, 0, notifyIntent,
PendingIntent.FLAG_UPDATE_CURRENT );

return new
NotificationCompat.Builder(getApplicationContext(),channelId)
.setSmallIcon(R.drawable.ic_alarm_black_24dp)
.setContentIntent(notifyPendingIntent);
}
}

Source code AlertReceiver.java :


import android.app.Notification;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

import androidx.core.app.NotificationCompat;

public class AlertReceiver extends BroadcastReceiver {


@Override
public void onReceive(Context context, Intent intent) {
NotificationHelper notificationHelper = new
NotificationHelper(context);
NotificationCompat.Builder builder =
notificationHelper.builder();

notificationHelper.getManager().notify(1,builder.build());
}
}

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
V-9

Source code TimePickerFragment.java :


import java.util.Calendar;
public class TimePickerFragment extends DialogFragment {
Calendar calendar;
int jam, menit;
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle
savedInstanceState) {
calendar = Calendar.getInstance();
jam = calendar.get(Calendar.HOUR_OF_DAY);
menit = calendar.get(Calendar.MINUTE);
return new TimePickerDialog(getActivity(),
(TimePickerDialog.OnTimeSetListener) getActivity(), jam,
menit, DateFormat.is24HourFormat(getActivity()));
}
}

Source Code AndroidManifest.xml :


<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.alarmmanager">

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity"
android:launchMode="singleTask"
android:taskAffinity=""
android:excludeFromRecents="true">
<intent-filter>
<action
android:name="android.intent.action.MAIN" />
<category
android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".AlertReceiver"/>
</application>

</manifest>
Source Code MainActivity.Java
public class MainActivity extends AppCompatActivity
implements TimePickerDialog.OnTimeSetListener,
View.OnClickListener {
private TextView tvTime;
private Button btnOpen, btnCancel;
private NotificationHelper notificationHelper;

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
V-10

private Calendar calendar;


int jam, menit;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

tvTime = findViewById(R.id.tv_time);
btnOpen = findViewById(R.id.btn_open);
btnCancel = findViewById(R.id.btn_cancel);

notificationHelper = new NotificationHelper(this);

calendar = Calendar.getInstance();
jam = calendar.get(Calendar.HOUR_OF_DAY);
menit = calendar.get(Calendar.MINUTE);

btnOpen.setOnClickListener(this);
btnCancel.setOnClickListener(this);
}

@Override
public void onTimeSet(TimePicker view, int hourOfDay, int
minute) {
calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND,0);

updateTime(calendar);
startAlarm(calendar);
}

private void updateTime (Calendar c)


{
String timeText = "Alarm Set For : ";
timeText +=
DateFormat.getTimeInstance(DateFormat.SHORT).format(c.getTime
());

tvTime.setText(timeText);
}

private void startAlarm (Calendar c)


{
AlarmManager alarmManager = (AlarmManager)
getSystemService(Context.ALARM_SERVICE);
Intent a = new Intent(this, AlertReceiver.class);
PendingIntent b = PendingIntent.getBroadcast(this, 1,
a, 0);

alarmManager.setExact(AlarmManager.RTC_WAKEUP,
c.getTimeInMillis(), b);
}

private void cancelAlarm() {


AlarmManager alarmManager = (AlarmManager)

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
V-11

getSystemService(Context.ALARM_SERVICE);
Intent a = new Intent(this, AlertReceiver.class);
PendingIntent b = PendingIntent.getBroadcast(this, 1,
a, 0);

alarmManager.cancel(b);
tvTime.setText("Alarm Canceled");
}

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_open:
DialogFragment timePicker = new
TimePickerFragment();
timePicker.show(getSupportFragmentManager(),
"Time Picker");
break;
case R.id.btn_cancel:
cancelAlarm();
break;
}
}
}

Gambar 5.3 Tampilan pada saat atur waktu alarm

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
V-12

Gambar 5.4 Tampilan saat ada notifikasi alarm

Gambar 5.5 Tampilan saat bilah notifikasi di klik


Analisa :
File activity_main.xml mempunyai fungsi untuk mendesain dan
menentukan komponen - komponen apa saja yang akan digunakan seperti,
textview, button, dan juga mengganti warna background. Komponen -
komponen diberikan id untuk penamaannya seperti button buka time picker
diberi id btn_buka dan button batal diberi id btn_batal.
Fungsi file NotificationHelper adalah membuat tampilan notifikasi
alarm pada notification bar, pada source code file NotificationHelper ada
variabel notifyIntent yang mempunyai fungsi ketika notifikasi alarm di klik
maka akan kembali ke activity sebelumnya yaitu MainActivity.
Untuk file TimePickerFragment.Java mempunya fungsi untuk mengatur
format waktu yang akan digunakan serta untuk mengambil data waktu tersebut.
Variabel calendar digunakan untuk mengambil data spesifikasi zona waktu /

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
V-13

hari ditandai dengan perintah calendar = Calendar.getInstance();, Variabel jam


digunakan untuk mengambil data jam selama 24 jam, dan variabel minute
digunakan untuk mengambil data menit.
Pada file AndroidManifest.xml ditambahkan source code launchMode,
taskAffinity, dan excludeFromRecents yang mempunyai fungsi yaitu, pada
waktu notifikasi alarm diklik maka akan berpindah ke dalam kondisi terakhir
saat aplikasi ketika berjalan sebelumnya atau kembali ke tampilan menu utama.
V.5 Kesimpulan
1. Mahasiswa dapat memahami konsep dasar Background Proccess
2. Mahasiswa dapat mengimplementasikan pembuatan Background Proccess
pada android
3. Mahasiswa dapat membuat Background Proccess sederhana pada android
studio

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VI-1

BAB VI
SQLITE DATABASE
JumlahPertemuan : 2 x 60 menit

TujuanPraktikum : 1. Mampu memahami dasar-dasar pemrograman sqlite


database
2. Mampu mengimplementasikan konsep sqlite
database
3. Mampu membuat aplikasi sederhana berisikan data
pada sqlite database
Alat / bahan : 1. Laptop
2. Smartphone
3. Modul Praktikum

VI.1 Landasan Teori


8.3.1 Penjelasan Database SQLite
SQLite adalah perpustakaan perangkat lunak yang menerapkan
engine database SQL secara mandiri, tanpa memerlukan server, tanpa
perlu melakukan konfigurasi, dan bersifat transaksional. SQLite adalah
engine database SQL yang paling banyak digunakan di dunia. SQLite
merupakan proyek yang bersifat public domain yang dikerjakan oleh D.
Richard Hipp.
SQLite adalah sebuah engine database SQL yang langsung
tertanam atau pada aplikasi. Tidak seperti kebanyakan database SQL
lainnya, SQLite tidak memiliki server yang terpisah dari aplikasi.
SQLite membaca dan menulis langsung ke file disk biasa. Database
SQLite memiliki fitur lengkap dengan banyak tabel, indexs, trigger, dan
tampilan, serta tersimpan pada satu file tunggal dalam hard-disk.
Format file databasenya bersifat crossplatform. Sehingga Anda dapat

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VI-2

dengan bebas menyalin database antara sistem 32-bit dan 64bit atau
antara arsitektur yang berbeda flatform. Fitur-fitur ini membuat SQLite
menjadi pilihan populer sebagai Application File Format.
SQLite telah didukung oleh banyak bahasa pemrograman seperti C,
C ++, BASIC, C #, Python, Java dan Delphi. Dukungan dari COM
(ActiveX) membuat SQLite dapat diakses ke bahasa scripted di
Windows seperti VB Script dan JavaScript, sehingga akan menambah
kemampuan untuk aplikasi HTML. Dukungan terhadap database ini
juga tersedia di sistem operasi embedded seperti iOS, Android, Symbian
OS, Maemo, Blackberry dan WebOS karena ukurannya yang kecil dan
mudah digunakan.
Berikut ini beberapa keunggulan SQLite :
1. SQLite tidak memerlukan proses atau sistem server yang terpisah
untuk beroperasi (Serverless).
2. SQLite hadir dengan zero-configuration, yang berarti tidak ada
setup atau administrasi yang dibutuhkan.
3. Database SQLite yang lengkap disimpan dalam file tunggal yang
tersimpan dalam disk serta bersifat cross-platform.
4. SQLite sangat kecil dan ringan, kurang dari 400KiB untuk
konfigurasi lengkap atau kurang dari 250KiB dengan fitur opsional
dihilangkan.
5. SQLite bersifat mandiri, yang berarti tidak ada dependensi
eksternal.
6. Transaksi SQLite sepenuhnya sesuai dengan ACID,
memungkinkan akses yang aman dari banyak proses.
7. SQLite mendukung sebagian besar fitur bahasa query yang
ditemukan dalam standar SQL92 (SQL2).
8. SQLite ditulis dalam ANSI-C dan menyediakan API yang
sederhana dan mudah digunakan.

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VI-3

9. SQLite tersedia di semua sistem operasi baik ini UNIX (Linux, Mac
OS-X, Android, iOS) dan Windows (Win32, WinCE, WinRT).
8.3.2 SQLite java classes
A. Cursor
SQLiteDatabase selalu menyajikan hasil berupa Cursor
dalam format tabel yang menyerupai database SQL. Anda bisa
menganggap data sebagai larik baris dan cursor adalah pointer ke
dalam satu baris data terstruktur. Kelas Cursor menyediakan
metode untuk menggerakan cursor melalui struktur data, dan
metode untuk mendapatkan data dari bidang-bidang setiap baris.
Kelas Cursor memiliki sejumlah subkelas yang
mengimplementasikan cursor untuk tipe data tertentu, yaitu:
1. SQLiteCursor untuk mengekspos hasil query dari sebuah
SQLiteDatabase. SQLiteCursor tidak disinkronkan secara
internal, sehingga kode yang menggunakan SQLiteCursor dari
beberapa thread harus melakukan sinkronisasi sendiri saat
menggunakan SQLiteCursor.
2. MatrixCursor adalah implementasi cursor lengkap dan tidak
tetap, yang didukung oleh larik objek yang secara otomatis
meluaskan kapasitas internal bila diperlukan.
Beberapa operasi umum yang ada pada cursor adalah :
1. getCount(), mengembalikan jumlah baris dalam cursor.
2. getColumnNames(), mengembalikan larik string yang berisi
nama semua kolom dalam rangkaian hasil dalam urutan
pencantumannya dalam hasil/result.
3. getPosition(), mengembalikan posisi cursor saat ini dalam
rangkaian baris.
4. Getter tersedia untuk tipe data tertentu, seperti getString(int
column) dan getInt(int column).

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VI-4

5. Operasi seperti moveToFirst(), moveToLeft dan moveToNext()


akan menggerakan cursor.
6. close(), membebaskan semua sumber daya dan membuat
cursor menjadi tidak valid.
B. SQLiteDatabase
SQLiteDatabase merupakan class utama yang menyediakan
method-method untuk keperluan query seperti insert(), update(),
dan delete(). Disamping itu juga disediakan method execSQL()
yang bsia digunakan untuk mengesekusi statment SQL secara
langsung.
C. SQLiteOpenHelper
SQLiteOpenHelper salah satu fitur yang digunakan di
dalam aplikasi Android Studio untuk membuat tabel yang dapat
menyimpan berbagai data seperti String dan Integer.
SQLiteOpenHelper memiliki beberapa metode yang dapat
digunakan, yaitu:
1. onCreate(), akan dipanggil bila sebelumnya tidak ada database
2. onUpgrade(), akan dipanggil bila ditemukan database yang
sama namun memiliki versi yang beda, digunakan juga untuk
mengubah skema database
3. onOpen(), dijalankan pada saat database dalam keadaan
terbuka
4. getWritableDatabase(), memanggil database agar dapat
ditambahkan datanya
5. getReadableDatabase(), memanggil database agar dapat
dilihat isi databasenya
D. ContentValues
Serupa dengan cara ekstra menyimpan data, instance
ContentValues menyimpan data sebagai pasangan nilai kunci,

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VI-5

dalam ini kuncinya adalah nama kolom dan nilainya untuk cell.
Satu instance ContentValues menyatakan satu baris tabel.

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VI-6

VI.2 Langkah – Langkah Praktikum


1. Buka aplikasi Android Studio.
2. Tulis Source Code.
3. Buka Comfile pada Android Studio.
VI.3 Tugas 1 : Membuat progam untuk menampilkan data dari database
Source Code activity_main.xml :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:gravity="center"
tools:context=".MainActivity">

<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="create"
android:onClick="btn_create"
android:layout_marginTop="20dp"/>

<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="read"
android:onClick="btn_read"
android:layout_marginTop="10dp"/>
</LinearLayout>

Source Code activity_main_create.xml :


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VI-7

android:paddingTop="@dimen/activity_vertical_margin"
android:gravity="center"
android:orientation="vertical"
tools:context=".MainCreate">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello welcome to Create" />

<EditText
android:id="@+id/create_nama"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:hint="Nama" />

<EditText
android:id="@+id/create_kelas"
android:hint="Kelas"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

<Button
android:id="@+id/create_btn"
android:layout_marginTop="20dp"
android:text="CREATE"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

</LinearLayout>

Source Code activity_main_read.xml :


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"

android:paddingBottom="@dimen/activity_vertical_margin"

android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context=".MainRead">

<ListView
android:id="@+id/list_mahasiswa"
android:layout_width="match_parent"

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VI-8

android:layout_height="wrap_content"/>

</LinearLayout>

Source Code activity_main_updel.xml :


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

xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:gravity="center"
android:orientation="vertical"
tools:context=".MainUpdel">

<EditText
android:id="@+id/updel_nama"
android:layout_marginTop="20dp"
android:hint="Nama"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

<EditText
android:id="@+id/updel_kelas"
android:hint="Skill"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

<Button
android:id="@+id/btn_up"
android:layout_marginTop="20dp"
android:text="UPDATE"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

<Button
android:id="@+id/btn_del"
android:text="DELETE"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

</LinearLayout>

Source Code custom_list.xml :

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VI-9

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


<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/list_row_selector"
android:padding="5dp">

<LinearLayout
android:layout_weight="2"
android:layout_width="0dp"
android:layout_height="wrap_content">
<ImageView
android:layout_width="80dp"
android:layout_height="80dp"
android:id="@+id/iconid"
android:src="@drawable/ic_person"/>
</LinearLayout>
<LinearLayout
android:layout_gravity="center"
android:orientation="vertical"
android:layout_weight="5"
android:layout_width="0dp"
android:layout_height="wrap_content">
<TextView
android:textColor="@color/colorPrimary"
android:text="NAMA"
android:id="@+id/text_nama"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textStyle="bold"
android:layout_alignLeft="@+id/rating"
android:layout_alignStart="@+id/rating" />

<TextView
android:textColor="@color/colorPrimary"
android:text="KELAS"
android:id="@+id/text_kelas"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/text_nama"
android:layout_toRightOf="@+id/thumbnail_offline"
android:layout_toEndOf="@+id/thumbnail_offline" />
</LinearLayout>
</LinearLayout>

Source Code (MyDatabase.Java) :


package com.example.crud;

import android.content.ContentValues;
import android.content.Context;

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VI-10

import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import java.util.ArrayList;
import java.util.List;

public class MyDatabase extends SQLiteOpenHelper {

private static int DATABASE_VERSION = 1;


private static final String DATABASE_NAME =
"db_desainer";

private static final String tb_mahasiswa =


"tb_desainer";

private static final String tb_mahasiswa_id = "id";


private static final String tb_mahasiswa_nama =
"desainer";
private static final String tb_mahasiswa_kelas =
"kelas";

private static final String CREATE_TABLE_MAHASISWA=


"CREATE TABLE " + tb_mahasiswa + "("
+ tb_mahasiswa_id + " INTEGER PRIMARY KEY ," +
tb_mahasiswa_nama + " TEXT,"
+ tb_mahasiswa_kelas + " TEXT)";

public MyDatabase(Context context){


super(context, DATABASE_NAME, null,
DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE_MAHASISWA);
}

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

public void CreateMahasiswa (Mahasiswa mdNotif) {


SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(tb_mahasiswa_id, mdNotif.get_id());
values.put(tb_mahasiswa_nama, mdNotif.get_nama());
values.put(tb_mahasiswa_kelas,
mdNotif.get_kelas());
db.insert(tb_mahasiswa, null, values);
db.close();
}

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VI-11

public List<Mahasiswa> ReadMahasiswa() {


List<Mahasiswa> judulModelList = new
ArrayList<Mahasiswa>();
String selectQuery = "SELECT * FROM " +
tb_mahasiswa;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);

if (cursor.moveToFirst()) {
do {
Mahasiswa mdKontak = new Mahasiswa();
mdKontak.set_id(cursor.getString(0));
mdKontak.set_nama(cursor.getString(1));
mdKontak.set_kelas(cursor.getString(2));
judulModelList.add(mdKontak);
} while (cursor.moveToNext());
}
db.close();
return judulModelList;
}

public int UpdateMahasiswa (Mahasiswa mdNotif) {


SQLiteDatabase db = this.getWritableDatabase();

ContentValues values = new ContentValues();


values.put(tb_mahasiswa_nama, mdNotif.get_nama());
values.put(tb_mahasiswa_kelas,
mdNotif.get_kelas());

return db.update(tb_mahasiswa, values,


tb_mahasiswa_id + " = ?",
new String[] {
String.valueOf(mdNotif.get_id())}); }

public void DeleteMahasiswa (Mahasiswa mdNotif) {


SQLiteDatabase db = this.getWritableDatabase();
db.delete(tb_mahasiswa, tb_mahasiswa_id+ " = ?",
new
String[]{String.valueOf(mdNotif.get_id())});
db.close();
}
}

Source Code CustomListAdapter.Java :


package com.example.crud;

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VI-12

import android.widget.ImageView;
import android.widget.TextView;

import java.util.List;

public class CustomListAdapter extends BaseAdapter{


private Activity activity;
private LayoutInflater inflater;
private List<Mahasiswa> movieItems;

public CustomListAdapter(Activity activity,


List<Mahasiswa> movieItems)
{
this.activity = activity;
this.movieItems = movieItems;
}

@Override
public int getCount() {
return movieItems.size();
}

@Override
public Object getItem(int location) {
return movieItems.get(location);
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(int position, View convertView,
ViewGroup parent) {

if (inflater == null)
inflater = (LayoutInflater) activity

.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null)
convertView =
inflater.inflate(R.layout.costum_list, null);

TextView nama = (TextView)


convertView.findViewById(R.id.text_nama);
TextView kelas = (TextView)
convertView.findViewById(R.id.text_kelas);

Mahasiswa m = movieItems.get(position);

nama.setText("Nama : "+ m.get_nama());


kelas.setText("Kelas : "+ m.get_kelas());

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VI-13

return convertView; }
}

Source Code Mahasiswa.java :


package com.example.sqlitedatabase;

public class Mahasiswa {


private String _id, _nama, _kelas;

public Mahasiswa(String id, String nama, String kelas)


{
this._id = id;
this._nama = nama;
this._kelas = kelas;
}
public Mahasiswa() {
}

public String get_id() {return _id;}


public void set_id(String _id) {
this._id = _id;
}

public String get_nama() {


return _nama;
}
public void set_nama(String _nama) {
this._nama = _nama;
}

public String get_kelas() {


return _kelas;
}
public void set_kelas(String _kelas) {this._kelas=
_kelas;}

Source Code MainActivity.Java :


package com.example.crud;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VI-14

setContentView(R.layout.activity_main);
}
public void btn_create(View view){
Intent a = new Intent(MainActivity.this,
MainCreate.class);
startActivity(a);
}

public void btn_read(View view) {


Intent b = new Intent(MainActivity.this,
MainRead.class);
startActivity(b);
}
}

Source Code MainCreate.Java :


package com.example.crud;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

public class MainCreate extends AppCompatActivity {


private MyDatabase db;
private EditText Enama, Ekelas;
private String Snama, Skelas;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.create);
db = new MyDatabase(this);

Enama = (EditText) findViewById(R.id.create_nama);


Ekelas= (EditText)
findViewById(R.id.create_kelas);

Button btnCreate = (Button)


findViewById(R.id.create_btn);
btnCreate.setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View view) {

Snama = String.valueOf(Enama.getText());
Skelas= String.valueOf(Ekelas.getText());

if (Snama.equals("")){

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VI-15

Enama.requestFocus();
Toast.makeText(MainCreate.this, "Silahkan
isi nama", Toast.LENGTH_SHORT).show();
} else if (Skelas.equals("")){
Ekelas.requestFocus();
Toast.makeText(MainCreate.this, "Silahkan
isi kelas", Toast.LENGTH_SHORT).show();

} else {
Enama.setText("");
Ekelas.setText("");
Toast.makeText(MainCreate.this, "Data
telah ditambah", Toast.LENGTH_SHORT).show();
db.CreateMahasiswa(new Mahasiswa(null,
Snama, Skelas));

Intent a = new Intent(MainCreate.this,


MainActivity.class);
startActivity(a);
}

}
});
}

Source Code MainRead.Java :


package com.example.crud;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import java.util.ArrayList;
import java.util.List;

public class MainRead extends AppCompatActivity implements


AdapterView.OnItemClickListener{
private ListView mListView;
private CustomListAdapter adapter_off;
private MyDatabase db;
private List<Mahasiswa> listMahasiswa = new
ArrayList<Mahasiswa>();

@Override protected void onCreate(Bundle


savedInstanceState) {
super.onCreate(savedInstanceState);

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VI-16

setContentView(R.layout.read);
db = new MyDatabase(this);

adapter_off = new CustomListAdapter(this,


listMahasiswa);
mListView = (ListView)
findViewById(R.id.list_mahasiswa);
mListView.setAdapter(adapter_off);
mListView.setOnItemClickListener(this);
mListView.setClickable(true);
listMahasiswa.clear();

List<Mahasiswa> contacts = db.ReadMahasiswa();


for (Mahasiswa cn : contacts) {
Mahasiswa judulModel = new Mahasiswa();
judulModel.set_id(cn.get_id());
judulModel.set_nama(cn.get_nama());
judulModel.set_kelas(cn.get_kelas());
listMahasiswa.add(judulModel);

if ((listMahasiswa.isEmpty()))
Toast.makeText(MainRead.this, "Tidak ada
data", Toast.LENGTH_SHORT).show();
else {

}
}
}

@Override
public void onItemClick(AdapterView<?> parent, View
view, int i, long l) {
Object o = mListView.getItemAtPosition(i);
Mahasiswa obj_itemDetails = (Mahasiswa)o;

String Sid = obj_itemDetails.get_id();


String Snama = obj_itemDetails.get_nama();
String Skelas = obj_itemDetails.get_kelas();

Intent goUpdel = new Intent(MainRead.this,


MainUpdel.class);
goUpdel.putExtra("Iid", Sid);
goUpdel.putExtra("Inama", Snama);
goUpdel.putExtra("Ikelas", Skelas);
startActivity(goUpdel);
}

@Override
protected void onResume() {
super.onResume();
listMahasiswa.clear();
mListView.setAdapter(adapter_off);

List<Mahasiswa> contacts = db.ReadMahasiswa();

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VI-17

for (Mahasiswa cn : contacts) {


Mahasiswa judulModel = new Mahasiswa();
judulModel.set_id(cn.get_id());
judulModel.set_nama(cn.get_nama());
judulModel.set_kelas(cn.get_kelas());
listMahasiswa.add(judulModel);

if ((listMahasiswa.isEmpty()))
Toast.makeText(MainRead.this, "Tidak ada
data", Toast.LENGTH_SHORT).show();
else {

}
}
}
}

Source Code MainUpdel.Java :


package com.example.crud;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

public class MainUpdel extends AppCompatActivity {


private MyDatabase db;
private String Sid, Snama, Skelas;
private EditText Enama, Ekelas;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.updel);
db = new MyDatabase(this);

Intent i = this.getIntent();
Sid = i.getStringExtra("Iid");
Snama = i.getStringExtra("Inama");
Skelas = i.getStringExtra("Ikelas");

Enama = (EditText) findViewById(R.id.updel_nama);


Ekelas = (EditText) findViewById(R.id.updel_kelas);

Enama.setText(Snama);
Ekelas.setText(Skelas);
Button btnUpdate = (Button)
findViewById(R.id.btn_up);
btnUpdate.setOnClickListener(new

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VI-18

View.OnClickListener() {
@Override
public void onClick(View view) {
Snama = String.valueOf(Enama.getText());
Skelas = String.valueOf(Ekelas.getText());
if (Snama.equals("")){
Enama.requestFocus();
Toast.makeText(MainUpdel.this,
"Silahkan isi nama", Toast.LENGTH_SHORT).show();
} else if (Skelas.equals("")){
Ekelas.requestFocus();
Toast.makeText(MainUpdel.this,
"Silahkan isi kelas", Toast.LENGTH_SHORT).show();
} else {
db.UpdateMahasiswa(new Mahasiswa(Sid,
Snama, Skelas));
Toast.makeText(MainUpdel.this, "Data telah
diupdate", Toast.LENGTH_SHORT).show();
finish();
}
} });
Button btnDelete = (Button)
findViewById(R.id.btn_del);
btnDelete.setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View view) {
db.DeleteMahasiswa(new Mahasiswa(Sid,
Snama, Skelas));
Toast.makeText(MainUpdel.this, "Data telah
dihapus", Toast.LENGTH_SHORT).show();
finish();
}
});
}
}

Source Code AndroidManifest.xml :


<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.crud">

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainCreate"/>
<activity android:name=".MainRead"/>
<activity android:name=".MainUpdel"/>
Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VI-19

<activity android:name=".MainActivity">
<intent-filter>
<action
android:name="android.intent.action.MAIN" />

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

</manifest>

Gambar 6.4 Tampilan create

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VI-20

Gambar 6.5 Tampilan read

Gambar 6.6 Tampilan delete

Analisa :

Pada program ini mengimplementasikan membuat database


internal untuk menyimpan data. Terdapat class CustomListAdapter untuk
menampilkan list data, Desainer, MyDatabase untuk konfigurasi database,
MainActivity, MainCreate untuk membuat data, MainRead untuk
membaca data dan MainUpdel untuk update dan hapus data. Sementara
pada layout terdapat tampilan main, create, read, updel dan customlist (list
data dari database).

VI.4 Tugas Rumah 1 : Membuat program berisikan database dengan 3


CRUD
Source Code MyDatabase.Java :
package com.example.tugas5crud;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import java.util.ArrayList;
import java.util.List;
Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VI-21

public class MyDatabase extends SQLiteOpenHelper


{
private static int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "db_kue";
private static final String tb_Kue = "tb_Kue";
private static final String tb_kue_id = "id";
private static final String tb_kue_namakue = "namakue";
private static final String tb_kue_harga = "Kue";
private static final String CREATE_TABLE_Kue = "CREATE
TABLE " + tb_Kue + "("
+ tb_kue_id + " INTEGER PRIMARY KEY ,"
+ tb_kue_namakue + " TEXT,"
+ tb_kue_harga + " TEXT " + ")";

public MyDatabase (Context context


){
super(context, DATABASE_NAME, null,
DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db)
{
db.execSQL(CREATE_TABLE_Kue);
}
@Override
public void onUpgrade(SQLiteDatabase db, int
oldVersion, int newVersion)
{

}
public void CreateKue (Kue mdNotif)
{
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(tb_kue_id, mdNotif.get_id());
values.put(tb_kue_namakue, mdNotif.get_namakue());
values.put(tb_kue_harga, mdNotif.get_harga());
db.insert(tb_Kue, null, values);
db.close();
}
public List<Kue> ReadKue()
{
List<Kue> judulModelList = new ArrayList<Kue>();
String selectQuery = "SELECT * FROM " + tb_Kue;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);

if (cursor.moveToFirst())
{
do
{
Kue mdKontak = new Kue();
mdKontak.set_id(cursor.getString(0));

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VI-22

mdKontak.set_namakue(cursor.getString(1));

mdKontak.set_harga(cursor.getString(2));
judulModelList.add(mdKontak);
} while (cursor.moveToNext());
}
db.close();
return judulModelList;
}
public int UpdateKue (Kue mdNotif)
{
SQLiteDatabase db = this.getWritableDatabase();

ContentValues values = new ContentValues();


values.put(tb_kue_namakue, mdNotif.get_namakue());
values.put(tb_kue_harga, mdNotif.get_harga());

return db.update(tb_Kue, values, tb_kue_id + " =


?",
new String[] {
String.valueOf(mdNotif.get_id())});
}
public void DeleteKue (Kue mdNotif)
{
SQLiteDatabase db = this.getWritableDatabase();
db.delete(tb_Kue, tb_kue_id+ " = ?",
new
String[]{String.valueOf(mdNotif.get_id())});
db.close();
}
}

Source Code Kue.Java :


package com.example.tugas5crud;
public class Kue {
private String _id, _namakue, _harga;

public Kue (String id, String namakue, String harga) {


this._id = id;
this._namakue = namakue;
this._harga = harga;
}
public Kue() {

}
public String get_id() {
return _id; }

public void set_id(String _id)


{
this._id = _id;
}
public String get_namakue()

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VI-23

{
return _namakue;
}

public void set_namakue(String _namakue


) {
this._namakue = _namakue;
}
public String get_harga()
{
return _harga;
}
public void set_harga(String _harga) {
this._harga = _harga;
}
}

Source Code activity_custom_list.xml :


<LinearLayout
android:layout_gravity="center"
android:orientation="vertical"
android:layout_weight="5"
android:layout_width="0dp"
android:layout_height="wrap_content">
<TextView
android:textColor="@color/colorPrimary"
android:text="NAMA KUE"
android:id="@+id/text_namakue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textStyle="bold"
android:layout_alignLeft="@+id/rating"
android:layout_alignStart="@+id/rating" />
<TextView
android:textColor="@color/colorPrimary"
android:text="HARGA"
android:id="@+id/text_harga"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/title"
android:layout_toRightOf="@+id/thumbnail_offline"
android:layout_toEndOf="@+id/thumbnail_offline" />
</LinearLayout>

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VI-24

Source Code custom_list.Java :


package com.example.tugas5crud;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class custom_list extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_custom_list);
}
}

Source Code CustomListAdapter.java :


package com.example.tugas5crud;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;

public class CustomListAdapter extends BaseAdapter


{
private Activity activity;
private LayoutInflater inflater;
private List<Kue> movieItems;
public CustomListAdapter(Activity activity, List<Kue>
movieItems)
{
this.activity = activity;
this.movieItems = movieItems;
}
@Override
public int getCount()
{
return movieItems.size();
}
@Override
public Object getItem(int location)
{
return movieItems.get(location);
}
@Override
public long getItemId(int position)
{ return position;
}
@Override
public View getView(int position, View convertView,
ViewGroup parent)

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VI-25

{
if (inflater == null)
inflater = (LayoutInflater) activity

.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null)
convertView =
inflater.inflate(R.layout.activity_custom_list, null);

TextView namakue = (TextView)


convertView.findViewById(R.id.text_namakue);
TextView harga = (TextView)
convertView.findViewById(R.id.text_harga);
ImageView imageView = (ImageView)
convertView.findViewById(R.id.iconid);
Kue m = movieItems.get(position);
namakue.setText("Nama Kue : "+ m.get_namakue());
harga.setText("Harga : "+ m.get_harga());
return convertView; } }

Source Code activity_main_create.xml :


<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello welcome to Create" />
<EditText
android:id="@+id/create_namakue"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:hint="namakue" />
<EditText
android:id="@+id/create_harga"
android:hint="harga"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/create_btn"
android:layout_marginTop="20dp"
android:text="CREATE"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

Source Code MainCreate.Java :


package com.example.tugas5crud;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VI-26

import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class MainCreate extends AppCompatActivity {
private MyDatabase db;
private EditText Enamakue, Eharga;
private String Snamakue, Sharga;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_create);
db = new MyDatabase(this);
Enamakue = (EditText)
findViewById(R.id.create_namakue);
Eharga = (EditText)
findViewById(R.id.create_harga);
Button btnCreate = (Button)
findViewById(R.id.create_btn);
btnCreate.setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View view) {
Snamakue =
String.valueOf(Enamakue.getText());

Sharga = String.valueOf(Eharga.getText());
if (Snamakue.equals("")){

Enamakue.requestFocus();

Toast.makeText(MainCreate.this,
"Silahkan isi Nama

Kue",Toast.LENGTH_SHORT).show();
}

else if (Sharga.equals("")){

Eharga.requestFocus();

Toast.makeText(MainCreate.this,
"Silahkan isi

Harga", Toast.LENGTH_SHORT).show();

else {

Enamakue.setText("");

Eharga.setText("")

Toast.makeText(MainCreate.this,

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VI-27

"Data telah

ditambah",
Toast.LENGTH_SHORT).show();
db.CreateKue(new Kue(null, Snamakue,
Sharga));
Intent a = new
Intent(MainCreate.this,

MainActivity.class);
startActivity(a);
}
}
}
);
}
}

Source Code MainRead.Java :


package com.example.tugas5crud;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import java.util.ArrayList;
import java.util.List;
public class MainRead extends AppCompatActivity implements
AdapterView.OnItemClickListener
{
private ListView mListView;
private CustomListAdapter adapter_off;
private MyDatabase db;
private List<Kue> ListKue = new ArrayList<Kue>();
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_read);
db = new MyDatabase(this);
adapter_off = new CustomListAdapter(this, ListKue
);
mListView = (ListView) findViewById(R.id.list_Kue);
mListView.setAdapter(adapter_off);
mListView.setOnItemClickListener(this);
mListView.setClickable(true);
ListKue.clear();
List<Kue> contacts = db.ReadKue();
for (Kue cn : contacts)
{
Kue judulModel = new Kue();

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VI-28

judulModel.set_id(cn.get_id());
judulModel.set_namakue(cn.get_namakue());
judulModel.set_harga(cn.get_harga());
ListKue.add(judulModel);
if ((ListKue.isEmpty()))
Toast.makeText(MainRead.this, "Tidak ada
data", Toast.LENGTH_SHORT).show();
else
{
}
}
}
@Override
public void onItemClick(AdapterView<?> parent, View
view, int i, long l)
{
Object o = mListView.getItemAtPosition(i);
Kue obj_itemDetails = (Kue)o;
String Sid = obj_itemDetails.get_id();
String Snamakue = obj_itemDetails.get_namakue();
String Sharga = obj_itemDetails.get_harga();
Intent goUpdel = new Intent(MainRead.this,
MainUpdel.class);
goUpdel.putExtra("Iid", Sid);
goUpdel.putExtra("Inamakue", Snamakue);
goUpdel.putExtra("Iharga", Sharga);
startActivity(goUpdel);
}

@Override
protected void onResume()
{
super.onResume();
ListKue.clear();
mListView.setAdapter(adapter_off);
List<Kue> contacts = db.ReadKue();
for (Kue cn : contacts)
{
Kue judulModel = new Kue();
judulModel.set_id(cn.get_id());
judulModel.set_namakue(cn.get_namakue());
judulModel.set_harga(cn.get_harga());
ListKue.add(judulModel);
if ((ListKue.isEmpty()))
Toast.makeText(MainRead.this, "Tidak ada
data", Toast.LENGTH_SHORT).show();
else
{
}
}
}
}

Source Code MainUpdel.Java :


Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VI-29

package com.example.tugas5crud;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class MainUpdel extends AppCompatActivity
{
private MyDatabase db;
private String Sid, Snamakue, Sharga;
private EditText Enamakue, Eharga;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_updel);
db = new MyDatabase(this);

Intent i = this.getIntent();
Sid = i.getStringExtra("Iid");
Snamakue = i.getStringExtra("Inamakue");
Sharga = i.getStringExtra("Iharga");

Enamakue = (EditText)
findViewById(R.id.updel_namakue);
Eharga = (EditText) findViewById(R.id.updel_harga);

Enamakue.setText(Snamakue);
Eharga.setText(Sharga);
Button btnUpdate = (Button)
findViewById(R.id.btn_up);
btnUpdate.setOnClickListener(new
View.OnClickListener()
{
@Override
public void onClick(View view)
{
Snamakue =
String.valueOf(Enamakue.getText());
Sharga = String.valueOf(Eharga.getText());
if (Snamakue.equals("")){
Enamakue.requestFocus();
Toast.makeText(MainUpdel.this,
"Silahkan isi namakue", Toast.LENGTH_SHORT).show();
} else if (Sharga.equals(""))
{
Eharga.requestFocus();
Toast.makeText(MainUpdel.this,
"Silahkan isi harga", Toast.LENGTH_SHORT).show();
}
else
{

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VI-30

db.UpdateKue(new Kue(Sid, Snamakue,


Sharga));
Toast.makeText(MainUpdel.this,
"Data telah diupdate", Toast.LENGTH_SHORT).show();
finish();
}
}
});
Button btnDelete = (Button)
findViewById(R.id.btn_del);
btnDelete.setOnClickListener(new
View.OnClickListener()
{
@Override
public void onClick(View view)
{
db.DeleteKue(new Kue(Sid, Snamakue,
Sharga));
Toast.makeText(MainUpdel.this, "Data telah
dihapus", Toast.LENGTH_SHORT).show();
finish();
}
}
);
}
}

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VI-31

Gambar 6.4 Tampilan create

Gambar 6.5 Tampilan read

Gambar 6.6 Tampilan delete


Analisa :

Pada program ini mengimplementasikan membuat database


internal untuk menyimpan data. Terdapat class CustomListAdapter untuk
menampilkan list data, Desainer, MyDatabase untuk konfigurasi database,
MainActivity, MainCreate untuk membuat data, MainRead untuk
membaca data dan MainUpdel untuk update dan hapus data. Sementara
pada layout terdapat tampilan main, create, read, updel dan customlist (list
data dari database).

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VI-32

VI.5 Kesimpulan
1. Mahasiswa dapat memahami konsep dasar SQLITE DATABASE
2. Mahasiswa dapat mengimplementasikan pembuatan SQLITE pada
android
3. Mahasiswa dapat membuat crud dengan SQLITE sederhana pada android
studio

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VII-1

BAB VII
REST API
JumlahPertemuan : 2 x 60 menit

TujuanPraktikum : 1. Mahasiswa mengetahui konsep REST API


2. Mahasiswa dapat menghubungkan antara web
service yang memiliki API dengan project android
3. Mahasiswa dapat melakukan GET, POST, PUT,
UPDATE, dan DELETE
Alat / bahan : 1. Laptop / PC
2. Modul Pratikum Mobile Programming 2019
3. Java SDK
4. Android Studio 3.5
5. SDK API 29

VII.1 Landasan Teori


1. Restful Api
Restful API didasarkan pada teknologi state transfer
(representational state transfer / REST), gaya arsitektur dan pendekatan
komunikasi yang sering digunakan dalam pengembangan layanan web.
Meskipun REST dapat digunakan di hampir semua protokol,
tapi biasanya memanfaatkan HTTP ketika digunakan untuk Web API.
Hal ini membantu pengembang web tidak perlu menginstal library atau
perangkat lunak tambahan untuk memanfaatkan desain REST API.
Design REST API pertama kali diperkenalkan oleh Dr. Roy Fielding
dalam disertasi doktor tahun 2000-nya. REST API terkenal karena
fleksibilitasnya yang luar biasa. Data tidak terikat dengan metode dan
sumber daya, REST memiliki kemampuan untuk menangani beberapa

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VII-2

jenis panggilan, mengembalikan format data yang berbeda dan bahkan


mengubah secara struktural tentunya dengan implementasi yang benar.
REST yang digunakan oleh browser dapat dianggap sebagai
bahasa internet. Dengan meningkatnya penggunaan cloud, API muncul
untuk mengekspos layanan web. REST adalah pilihan logis untuk
membangun API yang memungkinkan pengguna untuk terhubung dan
berinteraksi dengan layanan cloud. API telah banyak digunakan oleh
situs-situs seperti Amazon, Google, LinkedIn dan Twitter.
Cara RESTful APIs bekerja :
API secara eksplisit memanfaatkan metodologi HTTP yang
ditentukan oleh protokol RFC 2616. Permintaan ke API bisa
menggunakan GET untuk mengambil sumber daya, PUT untuk
mengubah status atau memperbarui sumber daya, yang dapat berupa
objek, file, atau blok, POST untuk membuat sumber daya itu, dan
DELETE untuk menghapusnya.
API dapat dikatakan “RESTful” jika memiliki fitur berikut :
1. Client – server : client menangani front end dan server menangani
back end dan keduanya dapat diganti secara independen satu sama
lain.
2. Stateless : Tidak ada data klien yang disimpan di server ketika ada
permintaan dan status sesi disimpan di klien.
3. Cacheable : Klien dapat men-cache respon (seperti browser yang
men-cache elemen statis halaman web) untuk meningkatkan kinerja.
Format Respon Populer Dari REST API
1. XML
2. JSON
Keuntungan terbesar dari Restful API adalah Anda tidak perlu
memasang apa pun di sisi klien. SDK atau framework tidak diperlukan.
Yang harus Anda lakukan adalah membuat permintaan HTTP
sederhana ke layanan end point dari API target, biarkan server
Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VII-3

melakukan layanannya untuk Anda dan dapatkan hasilnya kembali.


Sangat mudah dilakukan.
Contoh paling sederhana adalah Google API untuk login. Anda
tidak perlu menghabiskan banyak waktu hanya untuk membuat sistem
login untuk member di website. Anda hanya perlu memanggil API dari
google, pengguna hanya perlu login ke Google kemudian Anda akan
mendapatkan data semisal alamat email / nama dari pengguna tersebut.
Tentunya jika pengguna telah memberikan izin mengunakan data
mereka.
2. JSON (JavaScript Object Notation)
JSON singkatan dari JavaScript Object Notation adalah suatu
format ringkas pertukaran data yang sering digunakan untuk
mentransmisikan data terstruktur melalui suatu koneksi jaringan pada
suatu proses yang disebut serialisasi dan dapat direpresentasikan oleh
berbagai bahsa pemrograman.
Resource yang berbentuk format JSON yang disediakan REST
server dapat dimanfaatkan oleh aplikasi android dengan library Retrofit.
Retrofit adalah library Rest Client untuk android dan java
dari squareup.
3. Retrofit & Volley
A. Retrofit
Retrofit merupakan library android yang dibuat
oleh Square yang digunakan sebagai REST Client pada Android,
yang pasti akan memudahkan kita. Karena kita tidak perlu lagi
untuk membuat method-method sendiri untuk menggunakan REST
Client API dari backend. Library ini menyediakan framework yang
powerfull untuk authenticating dan berinteraksi dengan API
dengan mengirimkan request menggunakan OkHTTP

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VII-4

B. Volley
Volley merupakan produk yang diperkenalkan oleh Google
untuk mempermudah pertukaran data tanpa harus membuat deretan
kode yang sangat panjang. Secara default volley menggunakan
metode singkronisasi jadi anda tidak perlu membuat sebuah method
atau fungsi yang menggunakan class asynctask.
Melakukan sebuah request queuing and prioritization
(Mengutamakan prioritas dalam sebuah antrian)
VII.2 Langkah – Langkah Praktikum
1. Buka aplikasi android studio 3.5
2. Tulis Source Code
3. Buka Comfile pada Android Studio 3.5
VII.3 Tugas 1 : Membuat tampilan Movie List
Menambahkan source code gradle pada module app :
//pada android
buildConfigField "String", "MovieAPIKey",
"\"dca0565e8c3610b0b593d9c8ad1d2c7e\""
buildConfigField "String", "MovieBaseURL",
"\"http://api.themoviedb.org/3/\""
buildConfigField "String", "MovieImgURL",
"\"http://image.tmdb.org/t/p/\""
}
//pada depensice
implementation 'androidx.recyclerview:recyclerview:1.0.0'
implementation 'androidx.cardview:cardview:1.0.0'
//Retrofit, gson
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.squareup.retrofit2:retrofit:2.6.0'
implementation 'com.squareup.retrofit2:converter-
gson:2.6.0'
implementation 'androidx.lifecycle:lifecycle-
extensions:2.1.0'
annotationProcessor 'androidx.lifecycle:lifecycle-
compiler:2.1.0'
// Glide nampilin image
implementation 'com.github.bumptech.glide:glide:4.10.0'
annotationProcessor
'com.github.bumptech.glide:compiler:4.10.0'

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VII-5

Menambahkan source code pada manisfest :


<uses-permissionandroid:name="android.permission.INTERNET"/>

Source code activity_main.xml :


<androidx.swiperefreshlayout.widget.SwipeRefreshLayout

xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/swipe"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvMovie"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginStart="2dp"
android:layout_marginTop="4dp"
android:layout_marginEnd="2dp"
android:layout_marginBottom="4dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:listitem="@layout/movie_list_item" />
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>

Source code movie_list_item.xml :


<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VII-6

app:cardCornerRadius="6dp"
android:layout_margin="2dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/ivPoster"
android:layout_width="0dp"
android:layout_height="275dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:scaleType="fitXY"

android:src="@drawable/ic_local_movies_black_24dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tvMovieTitle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginEnd="32dp"
android:ellipsize="end"
android:maxLines="1"
android:textSize="14sp"
app:layout_constraintEnd_toEndOf="@+id/ivShare"

app:layout_constraintStart_toStartOf="@+id/ivPoster"

app:layout_constraintTop_toBottomOf="@+id/ivPoster"
tools:text="Judul Film" />
<TextView
android:id="@+id/tvReleaseDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:maxLines="4"
android:textSize="12sp"
app:layout_constraintBottom_toBottomOf="parent"

app:layout_constraintStart_toStartOf="@+id/tvMovieTitle"

app:layout_constraintTop_toBottomOf="@id/tvMovieTitle"
tools:text="15 Oktober 2019" />
<ImageView
android:id="@+id/ivShare"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
app:layout_constraintEnd_toEndOf="@+id/ivPoster"
app:layout_constraintTop_toBottomOf="@+id/ivPoster"
Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VII-7

app:srcCompat="@drawable/ic_share_black_24dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
Source code network_security_config.xml :
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
</network-security-config>

Source code ApiClient.java :


package com.example.mymovie.api;
import com.example.mymovie.BuildConfig;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class ApiClient
{
private static ApiClient mInstance;
private Retrofit retrofit;

private ApiClient() {
retrofit = new Retrofit.Builder()
.baseUrl(BuildConfig.MovieBaseURL)

.addConverterFactory(GsonConverterFactory.create())
.build();
}
public static synchronized ApiClient getInstance(){
if(mInstance==null){
mInstance = new ApiClient();
}
return mInstance;
}
public Api getApi(){
return retrofit.create(Api.class);
}
}

Source code Api.java :


package com.example.mymovie.api;
import com.example.mymovie.model.MovieList;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Query;
public interface Api
{

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VII-8

//https://api.themoviedb.org/3/discover/movie?api_key=api_ke
y&language=en-US
@GET("discover/movie")
Call<MovieList> getMovieList(@Query("api_key") String
key, @Query("language") String lang);

}
Source code MovieAdapter.java :
package com.example.mymovie.adapter;
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.example.mymovie.BuildConfig;
import com.example.mymovie.R;
import com.example.mymovie.model.Movie;
import java.util.List;
public class MovieAdapter extends
RecyclerView.Adapter<MovieAdapter.MovieViewHolder>
{
private Context mCtx;
private List<Movie> movieList;
public MovieAdapter(Context mCtx, List<Movie> movieList)
{
this.mCtx = mCtx;
this.movieList = movieList;
}
public List<Movie> getMovieList() {
return movieList;
}
public void setMovieList(List<Movie> movieList) {
this.movieList = movieList;
}
@NonNull
@Override
public MovieViewHolder onCreateViewHolder(@NonNull
ViewGroup parent, int viewType) {
View view =
LayoutInflater.from(mCtx).inflate(R.layout.movie_list_item,
parent, false);
return new MovieViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MovieViewHolder
holder, int position) {
Movie mov = getMovieList().get(position);
Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VII-9

Glide.with(mCtx).load(BuildConfig.MovieImgURL +
"w185/" + mov.getPosterPath()).into(holder.ivPoster);
holder.tvTitle.setText(mov.getTitle());
holder.tvRelease.setText(mov.getReleaseDate());
}
@Override
public int getItemCount() {
return movieList.size();
}
public class MovieViewHolder extends
RecyclerView.ViewHolder implements View.OnClickListener {
ImageView ivPoster, ivShare;
TextView tvTitle, tvRelease;
public MovieViewHolder(@NonNull View itemView) {
super(itemView);
ivPoster = itemView.findViewById(R.id.ivPoster);
tvTitle =
itemView.findViewById(R.id.tvMovieTitle);
tvRelease =
itemView.findViewById(R.id.tvReleaseDate);
ivShare = itemView.findViewById(R.id.ivShare);
ivShare.setOnClickListener(this);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
int pos = getAdapterPosition();
Movie mov = getMovieList().get(pos);
if (view.getId() == R.id.ivShare) {
Intent Intent;
Intent = new Intent(Intent.ACTION_SEND);
Intent.setType("text/plain");
Intent.putExtra(Intent.EXTRA_SUBJECT,
mov.getTitle());
Intent.putExtra(Intent.EXTRA_TEXT,
mov.getOverview());

mCtx.startActivity(Intent.createChooser(Intent, null));
} else {
Toast.makeText(mCtx, "Share Film " +
getMovieList().get(pos).getTitle(),
Toast.LENGTH_SHORT).show();
}
}
}}

Source code MovieViewModel :


package com.example.mymovie.viewmodel;
import android.util.Log;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VII-10

import com.example.mymovie.BuildConfig;
import com.example.mymovie.api.ApiClient;
import com.example.mymovie.model.MovieList;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;

public class MovieViewModel extends ViewModel {


private static final String TAG = "MovieViewModel";
MutableLiveData<MovieList> movieList;
public LiveData<MovieList> getMovieList() {
if (movieList == null) {
movieList = new MutableLiveData<>();
setMovieList();
}
return movieList;
}

private void setMovieList() {


ApiClient.getInstance().getApi().getMovieList(BuildConfig.Mo
vieAPIKey, "en-US")
.enqueue(new Callback<MovieList>() {
@Override
public void onResponse(Call<MovieList>
call, Response<MovieList> response) {
if (response.isSuccessful()) {
movieList.postValue(response.body());
}
}
@Override
public void onFailure(Call<MovieList>
call, Throwable t) {
movieList.postValue(new
MovieList(t));
Log.d(TAG, "onFailure: " +
t.getMessage());
}
});
}
public void Refresh() {
if (movieList != null) {
setMovieList();
}
}
}

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VII-11

Hasil Tampilan :

Gambar 7.1 Tampilan movie list


Analisa :
Pada program ini yang pertama dilakukan adalah harus daftar akun
pada website db.movie.org untuk mendapatkan API Key "MovieAPIKey",

"\"a9e8bf316080085693e580945768767d\"" yang nantinya sebagai penghubung


antara website movie db.org dan android. Pada movie_list_item.xml
merupakan tempat dimana design list item yang akan dibuat yang berisi
judul film,tanggal film dikeluarkan dan ikon share.

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VII-12

VII.# Tugas Rumah 1 : Membuat Prototipe Untuk Tugas Besar

Gambar 7.2 Prototipe Halaman Home

Gambar 7.3 Prototipe Halaman Pendaftaran

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VII-13

Gambar 7.4 Prototipe Halaman Login


Analisa :

Gambar 7.2 adalah tampilan home, yaitu tampilan awal atau halaman
utama dari aplikasi pendaftaran mahasiswa. Pada tampilan home
mempunyai 3 menu yaitu pendaftaran, login, dan about.
Pada menu pertama yaitu pendaftaran mempunyai fungsi melakukan
pendaftaran mahasiswa dan sekaligus melakukan pendaftaran akun, pada
menu kedua yaitu login berfungsi untuk login ketika sudah selesai
melakukan pendaftaran, dan yang terakhir menu about berisikan data
identitas kelompok.
Gambar 7.3 adalah tampilan dari form pendaftaran yang berisikan
isian biodata calon mahasiswa, setelah calon mahasiswa selesai melakukan
pengisian biodata maka secara otomatis form akan berpindah ke form
login..

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VII-14

Gambar 7.4 adalah tampilan login yang mempunyai fungsi untuk


login. Fungsi login dapat dilakukan setelah calon mahasiswa sudah selesai
mengisikan biodata.
VII.# Kesimpulan
1. REST (Representational State Transfer) pada umumnya formatnya
menggunakan JSON dan XML dimana terkenal karena fleksibilitasnya
yang luar biasa.
2. JSON biasanya digunakan sebagai format standar untuk bertukar data
antar aplikasi.
3. Retrofit merupakan library android yang dibuat oleh Square yang
digunakan sebagai REST Client pada Android, yang pasti akan
memudahkan kita.

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VIII-1

BAB VIII
PROJECT
JumlahPertemuan : 2 x 60 menit

TujuanPraktikum : 1. Mahasiswa dapat membuat aplikasi sendiri


2. Mahasiswa dapat menggabungkan dari beberapa
komponen yang ada di Android Studio
3. Mahasiswa dapat mengimplementasikan materi
yang diajarkan selama praktikum
Alat / bahan : 1. Laptop / PC
2. Modul Praktikum Mobile Programming 2019
3. Java JDK
4. Android Studio 3.5
5. SDK API 29

VIII.1 Landasan Masalah


Kehadiran smartphone Android sebagai salah satu produk
teknologi terbaru di bidang selular diharapkan dapat membantu mahasiswa
mengakses informasi, dengan Kemampuan smartphone Android untuk
selalu terkoneksi dengan internet dapat membantu mahasiswa baru dalam
memantau proses pendaftaran.
Aplikasi pendaftaran mahasiswa ITN ini menggunakan database
firebase untuk melakukan fungsi login dan dalam hal penyimpanan data
pendaftaran calon mahasiswa menggunkan sqlite. Pada aplikasi
pendaftaran ini menggunakan SDK Android 24 Nougat dan menggunakan
beberapa fungsi seperti RecycleViewer, CircleImageViewer dan
ActionBar.
Alur aplikasi dimulai dari user akan melakukan registrasi untuk
mendapatkan username dan password, lalu login user menggunakan email

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VIII-2

dan password. Agar dapat login, menggunakan firebase. Setelah masuk


akan masuk ke halaman home dan tedapat pilihan untuk melakukan
pendaftaran. Pada button pendaftaran, nantinya akan diarahkan ke activity
yg berisikan form pendaftaran. Pada form pendaftaran ini, user akan
mengisikan data diri. Apabila selesai melakukan pendaftaran, maka data
user akan ditampilkan sebagai bukti jika sudah melakukan pendaftaran.
VIII.2 Langkah – Langkah Project
1. Android Studio Version
2. Intent & Fragment
3. Navigation & Action Bar
4. RecyclerView
5. Background Process
6. SQLite
7. Rest Api (Tidak Wajid)
8. Hasil Project
VIII.3 Project
Source code MainActivity.java :
package com.example.pendaftaranmahasiwa;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.ui.NavigationUI;
import
com.google.android.material.navigation.NavigationView;

public class MainActivity extends AppCompatActivity {

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VIII-3

private Button btLogin, btReg;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btLogin = findViewById(R.id.btLogin);
btLogin.setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity( new
Intent(MainActivity.this, Login.class));
}
});
btReg = findViewById(R.id.btReg);
btReg.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view) {
startActivity( new
Intent(MainActivity.this, Register.class));
}
});
}
}

Source code activity_main.xml :


<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/gradient1"
tools:context=".MainActivity">
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/profile_image"
android:layout_width="195dp"
android:layout_height="166dp"
android:layout_marginBottom="96dp"
android:src="@drawable/itn"
app:layout_constraintBottom_toTopOf="@+id/btLogin"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<Button
android:id="@+id/btLogin"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginTop="16dp"

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VIII-4

android:layout_marginRight="16dp"
android:layout_marginBottom="268dp"
android:background="@color/bg_btn"
android:text="LOGIN"
android:textColor="@android:color/white"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent" />
<Button
android:id="@+id/btReg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginTop="16dp"
android:layout_marginRight="16dp"
android:background="@color/bg_btn"
android:text="REGISTER"
android:textColor="@android:color/white"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btLogin"
app:layout_constraintVertical_bias="0.0" />
</androidx.constraintlayout.widget.ConstraintLayout>

Source code login.java :


package com.example.pendaftaranmahasiwa;
import android.content.Intent;
import android.os.Bundle;
import android.util.Patterns;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;

public class Login extends AppCompatActivity {


private EditText edtEmail, edtPassword;
private Button btn_login;
private FirebaseAuth mAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VIII-5

setContentView(R.layout.activity_login);
initView();
login();
}
private void login() {
btn_login.setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View view) {
//menampung imputan user
final String emailUser =
edtEmail.getText().toString().trim();
final String passwordUser =
edtPassword.getText().toString().trim();

//validasi email dan password


// jika email kosong
if (emailUser.isEmpty()) {
edtEmail.setError("Email tidak boleh
kosong");
}
// jika email not valid
else if
(!Patterns.EMAIL_ADDRESS.matcher(emailUser).matches()) {
edtEmail.setError("Email tidak valid");
}
// jika password kosong
else if (passwordUser.isEmpty()) {
edtPassword.setError("Password tidak
boleh kosong");
}
//jika password kurang dari 6 karakter
else if (passwordUser.length() < 6) {
edtPassword.setError("Password minimal
terdiri dari 6 karakter");
} else {

mAuth.signInWithEmailAndPassword(emailUser, passwordUser)

.addOnCompleteListener(Login.this, new
OnCompleteListener<AuthResult>() {
@Override
public void
onComplete(@NonNull Task<AuthResult> task) {
// ketika gagal locin
maka akan do something
if
(!task.isSuccessful()) {

Toast.makeText(Login.this,
"Gagal
login karena user tidak ada!! Coba lagi ",
Toast.LENGTH_LONG).show();
} else {

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VIII-6

Bundle bundle = new


Bundle();

bundle.putString("email", emailUser);

bundle.putString("pass", passwordUser);
startActivity(new
Intent(Login.this, Home.class)

.putExtra("emailpass", bundle));
finish();
}
}
});
}
}
});
}
private void initView() {
edtEmail = findViewById(R.id.edt_email);
edtPassword = findViewById(R.id.edt_password);
btn_login = findViewById(R.id.btn_login);
mAuth = FirebaseAuth.getInstance();
}

Source code activity_login.xml :


<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/gradient1"
tools:context=".Login">

<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/profile_image"
android:layout_width="195dp"
android:layout_height="166dp"
android:layout_marginBottom="196dp"
android:src="@drawable/itn"

app:layout_constraintBottom_toTopOf="@+id/btn_login"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />

<EditText

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VIII-7

android:id="@+id/edt_email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:gravity="center"
android:hint="EMAIL"
android:importantForAutofill="no"
android:inputType="textEmailAddress"
android:textColorHint="#FFFF"
android:textStyle="bold"

app:layout_constraintBottom_toTopOf="@+id/edt_password"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_chainStyle="packed"
tools:targetApi="o" />
<EditText
android:id="@+id/edt_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:gravity="center"
android:hint="PASSWORD"
android:importantForAutofill="no"
android:inputType="textPassword"
android:textColorHint="#FFFF"
android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@+id/btn_login"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/edt_email"
tools:targetApi="o" />
<Button
android:id="@+id/btn_login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginTop="16dp"
android:layout_marginRight="16dp"
android:background="@color/bg_btn"
android:text="LOGIN"
android:textColor="@android:color/white"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"

app:layout_constraintTop_toBottomOf="@+id/edt_password" />
</androidx.constraintlayout.widget.ConstraintLayout>

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VIII-8

Source code home.java :


package com.example.pendaftaranmahasiwa;

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;

import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import
com.example.pendaftaranmahasiwa.Database.pro_crud.MainCreat
e;

public class Home extends AppCompatActivity {


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);

//untuk toolbar
Toolbar toolbar = findViewById(R.id.toolbar);
//Inisialisasi dan Implementasi id Toolbar
setSupportActionBar(toolbar); // Memasang Toolbar
pada Aplikasi

getSupportActionBar().setDisplayShowTitleEnabled(false);
//untuk menghilangkan tulisan SlimTi

//untuk kembali

toolbar.setNavigationIcon(getResources().getDrawable(R.draw
able.ic_back));
toolbar.setNavigationOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View view) {
onBackPressed();
}
});
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
//Memanggil/Memasang menu item pada toolbar dari
layout menu_bar.xml
MenuInflater inflater = getMenuInflater();

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VIII-9

inflater.inflate(R.menu.menu, menu);
return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.about :
//Kode disini akan di eksekusi saat tombol
menu di klik
Toast.makeText(this, "About",
Toast.LENGTH_SHORT).show();
Intent a = new Intent(Home.this,
Halaman_kelompok.class);
startActivity(a);
break;
}
return super.onOptionsItemSelected(item);
}

public void daftar(View view) {


Intent daftar = new Intent(Home.this,
MainCreate.class);
startActivity(daftar);
}
}

Source code activity_home.xml :


<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Home">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
android:fitsSystemWindows="true"
android:minHeight="?attr/actionBarSize"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:titleTextColor="@android:color/white">
</androidx.appcompat.widget.Toolbar>
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/profile_image"
android:layout_width="195dp"
android:layout_height="166dp"
Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VIII-10

android:layout_marginBottom="96dp"
android:src="@drawable/itn"
app:layout_constraintBottom_toTopOf="@+id/bt_home"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<Button
android:id="@+id/bt_home"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginTop="16dp"
android:layout_marginRight="16dp"
android:layout_marginBottom="268dp"
android:background="@color/bg_btn"
android:text="HOME"
android:textColor="@android:color/white"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent" />
<Button
android:onClick="daftar"
android:id="@+id/bt_daftar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginTop="16dp"
android:layout_marginRight="16dp"
android:background="@color/bg_btn"
android:text="Daftar"
android:textColor="@android:color/white"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/bt_home"
app:layout_constraintVertical_bias="0.0" />
<Button
android:id="@+id/bt_about"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginTop="16dp"
android:layout_marginRight="16dp"
android:background="@color/bg_btn"
android:text="LOGOUT"
android:textColor="@android:color/white"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/bt_daftar"
app:layout_constraintVertical_bias="0.0" />

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VIII-11

</androidx.constraintlayout.widget.ConstraintLayout>

Source code Register.java :


package com.example.pendaftaranmahasiwa;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;

public class Register extends AppCompatActivity {


private Button btn_reg;
private EditText etEmail;
private EditText etPassword;
private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mStateListener;
private static final String TAG =
Register.class.getSimpleName();
@Override
protected void onCreate(@Nullable Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
/**
* Inisialisasi Firebase Auth
*/
mAuth = FirebaseAuth.getInstance();

/**
* Cek apakah ada user yang sudah login
*/
btn_reg = (Button) findViewById(R.id.btn_reg);
etEmail = (EditText) findViewById(R.id.et_email);
etPassword = (EditText)
findViewById(R.id.et_password);

btn_reg.setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View view) {
/**

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VIII-12

* Lempar email dan password ketika tombol


signup diklik
*/
signUp(etEmail.getText().toString(),
etPassword.getText().toString());
}
});

checkLogin();
}

private void signUp(final String email, String


password){

mAuth.createUserWithEmailAndPassword(email,
password)
.addOnCompleteListener(this, new
OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull
Task<AuthResult> task) {
Log.d(TAG,
"createUserWithEmail:onComplete:" + task.isSuccessful());

/**
* Jika sign in gagal, tampilkan
pesan ke user. Jika sign in sukses
* maka auth state listener akan
dipanggil dan logic untuk menghandle
* signed in user bisa dihandle di
listener.
*/
if (!task.isSuccessful()) {

task.getException().printStackTrace();
Toast.makeText(Register.this,
"Proses Pendaftaran Gagal",

Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(Register.this,
"Proses Pendaftaran Berhasil\n" +
"Harap Login",

Toast.LENGTH_SHORT).show();
}

// rest of code
}
});

private void signIn(final String email, String

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VIII-13

password){

mAuth.signInWithEmailAndPassword(email, password)
.addOnCompleteListener(this, new
OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull
Task<AuthResult> task) {
Log.d(TAG,
"signInWithEmail:onComplete:" + task.isSuccessful());

/**
* Jika sign in gagal, tampilkan
pesan ke user. Jika sign in sukses
* maka auth state listener akan
dipanggil dan logic untuk menghandle
* signed in user bisa dihandle di
listener.
*/
if (!task.isSuccessful()) {
Log.w(TAG,
"signInWithEmail:failed", task.getException());
Toast.makeText(Register.this,
"Proses Login Gagal\n",

Toast.LENGTH_SHORT).show();
}
// ... rest of code
}
});
}

private void checkLogin(){


FirebaseUser user =
FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
// Nama email address photo uri
String email = user.getEmail();

// The user's ID, unique to the Firebase


project. Do NOT use this value to
// authenticate with your backend server, if
you have one. Use
// FirebaseUser.getToken() instead.
String uid = user.getUid();
}
}

@Override
protected void onStart() {
super.onStart();
}

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VIII-14

@Override
protected void onResume() {
super.onResume();
}

@Override
protected void onStop() {
super.onStop();
if (mStateListener != null) {
mAuth.removeAuthStateListener(mStateListener);
}
}
}

Source code activity_register.xml :


<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/gradient1"
tools:context=".Register">
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/profile_image"
android:layout_width="195dp"
android:layout_height="166dp"
android:layout_marginBottom="196dp"
android:src="@drawable/itn"
app:layout_constraintBottom_toTopOf="@+id/btn_reg"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<EditText
android:id="@+id/et_email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:gravity="center"
android:hint="EMAIL"
android:importantForAutofill="no"
android:inputType="textEmailAddress"
android:textColorHint="#FFFF"
android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@+id/et_password"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_chainStyle="packed"
Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VIII-15

tools:targetApi="o" />
<EditText
android:id="@+id/et_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:gravity="center"
android:hint="PASSWORD"
android:importantForAutofill="no"
android:inputType="textPassword"
android:textColorHint="#FFFF"
android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@+id/btn_reg"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/et_email"
tools:targetApi="o" />
<Button
android:id="@+id/btn_reg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginTop="16dp"
android:layout_marginRight="16dp"
android:background="@color/bg_btn"
android:text="REGISTER"
android:textColor="@android:color/white"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"

app:layout_constraintTop_toBottomOf="@+id/et_password" />
</androidx.constraintlayout.widget.ConstraintLayout>

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VIII-16

Source code Kelompok.java :


package com.example.pendaftaranmahasiwa;
import android.graphics.drawable.Drawable;
public class Kelompok {
private String nama, nim;
private Drawable gambar;
public Kelompok(String nama, String nim, Drawable
gambar) {
this.nama = nama;
this.nim = nim;
this.gambar = gambar;
}
public String getNama() {
return nama;
}
public void setNama(String nama) {
this.nama = nama;
}
public String getNim() {
return nim;
}
public void setNim(String nim) {
this.nim = nim;
}
public Drawable getGambar() {
return gambar;
}
public void setGambar(Drawable gambar) {
this.gambar = gambar;
}
}

Source code KelompokAdapter.java :


package com.example.pendaftaranmahasiwa;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
public class KelompokAdapter extends
RecyclerView.Adapter<KelompokAdapter.KelompokViewHolder> {

private ArrayList<Kelompok> dataList;

public KelompokAdapter(ArrayList<Kelompok> dataList) {


this.dataList = dataList;
}

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VIII-17

@NonNull
@Override
public KelompokAdapter.KelompokViewHolder
onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
{
LayoutInflater layoutInflater =
LayoutInflater.from(parent.getContext());
View view =
layoutInflater.inflate(R.layout.item_kelompok, parent,
false);
return new KelompokViewHolder(view);
}
public void onBindViewHolder(KelompokViewHolder holder,
int position) {

holder.txtNama.setText(dataList.get(position).getNama());

holder.txtNim.setText(dataList.get(position).getNim());

holder.gmbrData.setImageDrawable(dataList.get(position).get
Gambar());
}
@Override
public int getItemCount() {
return (dataList != null) ? dataList.size() : 0;
}
public class KelompokViewHolder extends
RecyclerView.ViewHolder{
private TextView txtNama, txtNim;
private ImageView gmbrData;
public KelompokViewHolder(View itemView) {
super(itemView);
txtNama = (TextView)
itemView.findViewById(R.id.tv_nama);
txtNim = (TextView)
itemView.findViewById(R.id.tv_nim);
gmbrData = (ImageView)
itemView.findViewById(R.id.img_data);
}
}
}

Source code activity_halaman_kelompok.xml :


<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:app="http://schemas.android.com/apk/res-
auto"
xmlns:tools="http://schemas.android.com/tools"

xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VIII-18

tools:context=".Halaman_kelompok">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#009B6262">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
android:fitsSystemWindows="true"
android:minHeight="?attr/actionBarSize"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:titleTextColor="@android:color/white">
<TextView
android:id="@+id/toolbar_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Tentang Kelompok"
android:textColor="#FFFDFD"
android:textSize="25sp"
tools:layout_editor_absoluteX="176dp"
tools:layout_editor_absoluteY="18dp" />
</androidx.appcompat.widget.Toolbar>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_width="359dp"
android:layout_height="413dp"
android:layout_marginEnd="1dp"
android:clickable="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"

app:layout_constraintTop_toBottomOf="@+id/toolbar">
</androidx.recyclerview.widget.RecyclerView>
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>

Source code Mydatabase.java :


package com.example.pendaftaranmahasiwa.Database.pro_crud;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import java.util.ArrayList;
import java.util.List;
public class MyDatabase extends SQLiteOpenHelper {
Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VIII-19

private static int DATABASE_VERSION = 1;


private static final String DATABASE_NAME =
"db_kampus";
private static final String tb_mahasiswa =
"tb_mahasiswa";
private static final String tb_mhsiswa_nama = "nama";
private static final String tb_mhsiswa_ttl = "ttl";
private static final String tb_mhsiswa_agama = "agama";
private static final String tb_mhsiswa_gender =
"gender";
private static final String tb_mhsiswa_alamat =
"alamat";
private static final String tb_mhsiswa_ortu = "ortu";
private static final String CREATE_TABLE_MAHASISWA =
"CREATE TABLE " +
tb_mahasiswa + "("
+ tb_mhsiswa_nama + " PRIMARY KEY ,"
+ tb_mhsiswa_ttl + " TEXT,"
+ tb_mhsiswa_agama + " TEXT,"
+ tb_mhsiswa_gender + " TEXT,"
+ tb_mhsiswa_alamat + " TEXT,"
+ tb_mhsiswa_ortu + " TEXT" + ")";
public MyDatabase (Context context){
super(context, DATABASE_NAME, null,
DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE_MAHASISWA);
}
@Override
public void onUpgrade(SQLiteDatabase db, int
oldVersion, int newVersion) {
}
public void CreateMahasiswa (Mahasiswa mdNotif) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(tb_mhsiswa_nama, mdNotif.get_nama());
values.put(tb_mhsiswa_ttl, mdNotif.get_ttl());
values.put(tb_mhsiswa_agama, mdNotif.get_agama());
values.put(tb_mhsiswa_gender,
mdNotif.get_gender());
values.put(tb_mhsiswa_alamat,
mdNotif.get_alamat());
values.put(tb_mhsiswa_ortu, mdNotif.get_ortu());
db.insert(tb_mahasiswa, null, values);
db.close();}
public List<Mahasiswa> ReadMahasiswa() {
List<Mahasiswa> judulModelList = new
ArrayList<Mahasiswa>();
String selectQuery = "SELECT * FROM " +
tb_mahasiswa;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VIII-20

if (cursor.moveToFirst()) {
do {
Mahasiswa mdKontak = new Mahasiswa();
mdKontak.set_nama(cursor.getString(0));
mdKontak.set_ttl(cursor.getString(1));
mdKontak.set_agama(cursor.getString(2));
mdKontak.set_gender(cursor.getString(3));
mdKontak.set_alamat(cursor.getString(4));
mdKontak.set_ortu(cursor.getString(5));
judulModelList.add(mdKontak);
} while (cursor.moveToNext());
}
db.close();
return judulModelList;
}
public int UpdateMahasiswa (Mahasiswa mdNotif) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(tb_mhsiswa_nama, mdNotif.get_nama());
values.put(tb_mhsiswa_ttl, mdNotif.get_ttl());
values.put(tb_mhsiswa_agama, mdNotif.get_agama());
values.put(tb_mhsiswa_gender,
mdNotif.get_gender());
values.put(tb_mhsiswa_alamat,
mdNotif.get_alamat());
values.put(tb_mhsiswa_ortu, mdNotif.get_ortu());
return db.update(tb_mahasiswa, values,
tb_mhsiswa_nama + " = ?",
new String[] {
String.valueOf(mdNotif.get_nama())});
}
public void DeleteMahasiswa (Mahasiswa mdNotif) {
SQLiteDatabase db = this.getWritableDatabase();
db.delete(tb_mahasiswa, tb_mhsiswa_nama+ " = ?",
new
String[]{String.valueOf(mdNotif.get_nama())});
db.close();
}
}

Source code CustomListAdapter.java :


package com.example.pendaftaranmahasiwa.Database.pro_crud;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.pendaftaranmahasiwa.R;
import java.util.List;
Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VIII-21

public class CustomListAdapter extends BaseAdapter {


private Activity activity;
private LayoutInflater inflater;
private List<Mahasiswa> movieItems;
public CustomListAdapter(Activity activity,
List<Mahasiswa> movieItems) {
this.activity = activity;
this.movieItems = movieItems;
}
@Override
public int getCount() {
return movieItems.size();
}@Override
public Object getItem(int location) {
return movieItems.get(location);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView,
ViewGroup parent) {
if (inflater == null)
inflater = (LayoutInflater) activity

.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null)
convertView =
inflater.inflate(R.layout.custom_list, null);
TextView nama = (TextView)
convertView.findViewById(R.id.text_nama);
TextView ttl = (TextView)
convertView.findViewById(R.id.text_ttl);
TextView agama = (TextView)
convertView.findViewById(R.id.text_agama);
TextView gender = (TextView)
convertView.findViewById(R.id.text_gender);
TextView alamat = (TextView)
convertView.findViewById(R.id.text_alamat);
TextView ortu = (TextView)
convertView.findViewById(R.id.text_ortu);
ImageView imageView = (ImageView)
convertView.findViewById(R.id.iconid);
Mahasiswa m = movieItems.get(position);
nama.setText("Nama : "+ m.get_nama());
ttl.setText("TTL : "+ m.get_ttl());
agama.setText("Agama : "+ m.get_agama());
gender.setText("Gender : "+ m.get_gender());
alamat.setText("Alamat : "+ m.get_alamat());
ortu.setText("Ortu : "+ m.get_ortu());
return convertView;
}
}

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VIII-22

Source code Mahasiswa.java :


package com.example.pendaftaranmahasiwa.Database.pro_crud;
public class Mahasiswa {
private String _nama, _ttl, _agama, _gender, _alamat,
_ortu;
public Mahasiswa (String nama, String ttl, String
agama, String gender, String alamat, String ortu) {
this._nama = nama;
this._ttl = ttl;
this._agama = agama;
this._gender = gender;
this._alamat = alamat;
this._ortu = ortu;
}
public Mahasiswa() {
}
public String get_nama() {
return _nama;
}
public void set_nama(String _nama) {
this._nama = _nama;
}
public String get_ttl() {
return _ttl;
}
public void set_ttl(String _ttl) {
this._ttl = _ttl;
}
public String get_agama() {
return _agama;
}
public void set_agama(String _agama) {
this._agama = _agama;
}
public String get_gender() {
return _gender;
}
public void set_gender(String _gender) {
this._gender = _gender;
}
public String get_alamat() {
return _alamat;
}
public void set_alamat(String _alamat) {
this._alamat = _alamat;
}
public String get_ortu() {
return _ortu;
}
public void set_ortu(String _ortu) {
this._ortu = _ortu;

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VIII-23

}
}

Source code MainCreate.java :


package com.example.pendaftaranmahasiwa.Database.pro_crud;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.example.pendaftaranmahasiwa.Home;
import com.example.pendaftaranmahasiwa.R;
public class MainCreate extends AppCompatActivity {
private MyDatabase db;
private EditText Enama, Ettl, Eagama, Egender, Ealamat,
Eortu;
private String Snama, Sttl, Sagama, Sgender, Salamat,
Sortu;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_create);
db = new MyDatabase(this);
Enama = (EditText) findViewById(R.id.create_nama);
Ettl = (EditText) findViewById(R.id.create_ttl);
Eagama = (EditText)
findViewById(R.id.create_agama);
Egender = (EditText)
findViewById(R.id.create_gender);
Ealamat = (EditText)
findViewById(R.id.create_alamat);
Eortu = (EditText) findViewById(R.id.create_ortu);
Button btnCreate = (Button)
findViewById(R.id.create_btn);
btnCreate.setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View view) {
Snama = String.valueOf(Enama.getText());
Sttl = String.valueOf(Ettl.getText());
Sagama = String.valueOf(Eagama.getText());
Sgender =
String.valueOf(Egender.getText());
Salamat =
String.valueOf(Ealamat.getText());
Sortu = String.valueOf(Eortu.getText());
if (Snama.equals("")){
Enama.requestFocus();
Toast.makeText(MainCreate.this, "Silahkan isi nama",

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VIII-24

Toast.LENGTH_SHORT).show();
} else if (Sttl.equals("")){
Ettl.requestFocus();
Toast.makeText(MainCreate.this,
"Silahkan isi Data Lahir",
Toast.LENGTH_SHORT).show();
Eagama.requestFocus();
Toast.makeText(MainCreate.this,
"Silahkan isi Data Agama",
Toast.LENGTH_SHORT).show();
Egender.requestFocus();
Toast.makeText(MainCreate.this,
"Silahkan isi Data Gender",
Toast.LENGTH_SHORT).show();
Ealamat.requestFocus();
Toast.makeText(MainCreate.this,
"Silahkan isi Data Alamat",
Toast.LENGTH_SHORT).show();
Eortu.requestFocus();
Toast.makeText(MainCreate.this,
"Silahkan isi Data Orang Tua",
Toast.LENGTH_SHORT).show();
} else {
Enama.setText("");Enama.setText("");
Toast.makeText(MainCreate.this, "Data
telah ditambah",
Toast.LENGTH_SHORT).show();
Ettl.setText("");Enama.setText("");
Toast.makeText(MainCreate.this, "Data
telah ditambah",
Toast.LENGTH_SHORT).show();
Eagama.setText("");Enama.setText("");
Toast.makeText(MainCreate.this, "Data
telah ditambah",
Toast.LENGTH_SHORT).show();
Egender.setText("");Enama.setText("");
Toast.makeText(MainCreate.this, "Data
telah ditambah",
Toast.LENGTH_SHORT).show();
Ealamat.setText("");Enama.setText("");
Toast.makeText(MainCreate.this, "Data
telah ditambah",
Toast.LENGTH_SHORT).show();
Eortu.setText("");Enama.setText("");
Toast.makeText(MainCreate.this, "Data
telah ditambah",
Toast.LENGTH_SHORT).show();
db.CreateMahasiswa(new Mahasiswa(Snama,
Sttl, Sagama, Sgender, Salamat, Sortu));
Intent a = new Intent(MainCreate.this,
MainCreate.class);
startActivity(a);
}
}

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VIII-25

});
}
public void read(View view) {
Intent read = new Intent(MainCreate.this,
MainRead.class);
startActivity(read);
}
}

Source code Activity_main_create.xml :


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:gravity="center"
android:orientation="vertical"
tools:context=".Database.pro_crud.MainCreate">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="FORM PENDAFTARAN" />
<EditText
android:id="@+id/create_nama"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:hint="Nama" />
<EditText
android:id="@+id/create_ttl"
android:hint="TTL"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<EditText
android:id="@+id/create_agama"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:hint="Agama" />
<EditText
android:id="@+id/create_gender"
android:hint="Gender"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<EditText
Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VIII-26

android:id="@+id/create_alamat"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:hint="Alamat" />
<EditText
android:id="@+id/create_ortu"
android:hint="Ortu"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/create_btn"
android:layout_marginTop="20dp"
android:text="Tambah Data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/create_color"/>
<Button
android:onClick="read"
android:id="@+id/read_btn"
android:layout_marginTop="20dp"
android:text="Tampilkan Data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/create_color"/>
</LinearLayout>

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VIII-27

Source code MainRead.java :


package com.example.pendaftaranmahasiwa.Database.pro_crud;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.example.pendaftaranmahasiwa.R;
import java.util.ArrayList;
import java.util.List;
public class MainRead extends AppCompatActivity implements
AdapterView.OnItemClickListener{
private ListView mListView;
private CustomListAdapter adapter_off;
private MyDatabase db;
private List<Mahasiswa> ListMahasiswa = new
ArrayList<Mahasiswa>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_read);db =
new MyDatabase(this);
adapter_off = new CustomListAdapter(this,
ListMahasiswa );
mListView = (ListView)
findViewById(R.id.list_mahasiswa);
mListView.setAdapter(adapter_off);
mListView.setOnItemClickListener(this);
mListView.setClickable(true);
ListMahasiswa.clear();
List<Mahasiswa> contacts = db.ReadMahasiswa();
for (Mahasiswa cn : contacts) {
Mahasiswa judulModel = new Mahasiswa();
judulModel.set_nama(cn.get_nama());
judulModel.set_ttl(cn.get_ttl());
judulModel.set_agama(cn.get_agama());
judulModel.set_gender(cn.get_gender());
judulModel.set_alamat(cn.get_alamat());
judulModel.set_ortu(cn.get_ortu());
ListMahasiswa.add(judulModel);
if ((ListMahasiswa.isEmpty()))
Toast.makeText(MainRead.this, "Tidak ada
data",
Toast.LENGTH_SHORT).show();
else {
}
}
}
@Override
public void onItemClick(AdapterView<?> parent, View
view, int i, long l) {
Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VIII-28

Object o = mListView.getItemAtPosition(i);
Mahasiswa obj_itemDetails = (Mahasiswa)o;
String Snama = obj_itemDetails.get_nama();
String Sttl = obj_itemDetails.get_ttl();
String Sagama = obj_itemDetails.get_agama();
String Sgender = obj_itemDetails.get_gender();
String Salamat = obj_itemDetails.get_alamat();
String Sortu = obj_itemDetails.get_ortu();
Intent goUpdel = new Intent(MainRead.this,
MainUpDel.class);
goUpdel.putExtra("Inama", Snama);
goUpdel.putExtra("Ittl", Sttl);
goUpdel.putExtra("Iagama", Sagama);
goUpdel.putExtra("Igender", Sgender);
goUpdel.putExtra("Ialamat", Salamat);
goUpdel.putExtra("Iortu", Sortu);
startActivity(goUpdel);
}
@Override
protected void onResume() {
super.onResume();ListMahasiswa.clear();
mListView.setAdapter(adapter_off);
List<Mahasiswa> contacts = db.ReadMahasiswa();
for (Mahasiswa cn : contacts) {
Mahasiswa judulModel = new Mahasiswa();
judulModel.set_nama(cn.get_nama());
judulModel.set_ttl(cn.get_ttl());
judulModel.set_agama(cn.get_agama());
judulModel.set_gender(cn.get_gender());
judulModel.set_alamat(cn.get_alamat());
judulModel.set_ortu(cn.get_ortu());
ListMahasiswa.add(judulModel);
if ((ListMahasiswa.isEmpty()))
Toast.makeText(MainRead.this, "Tidak ada
data",
Toast.LENGTH_SHORT).show();
else {
}
}
}
}

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VIII-29

Source code Activity_main_read.java :


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context=".Database.pro_crud.MainRead">
<ListView
android:id="@+id/list_mahasiswa"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>

Source code MainUpdel.java :


package com.example.pendaftaranmahasiwa.Database.pro_crud;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.example.pendaftaranmahasiwa.R;
public class MainUpDel extends AppCompatActivity {
private MyDatabase db;
private String Snama, Sttl, Sagama, Sgender, Salamat,
Sortu;
private EditText Enama, Ettl, Eagama, Egender, Ealamat,
Eortu;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_up_del);db =
new MyDatabase(this);
Intent i = this.getIntent();
Snama = i.getStringExtra("Inama");
Sttl = i.getStringExtra("Ittl");
Sagama = i.getStringExtra("Iagama");
Sgender = i.getStringExtra("Igender");
Salamat = i.getStringExtra("Ialamat");
Sortu = i.getStringExtra("Iortu");
Enama = (EditText) findViewById(R.id.create_nama);
Ettl = (EditText) findViewById(R.id.create_ttl);

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VIII-30

Eagama = (EditText)
findViewById(R.id.create_agama);
Egender = (EditText)
findViewById(R.id.create_gender);
Ealamat = (EditText)
findViewById(R.id.create_alamat);
Eortu = (EditText) findViewById(R.id.create_ortu);
Button btnUpdate = (Button)
findViewById(R.id.btn_up);
btnUpdate.setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View view) {
Snama = String.valueOf(Enama.getText());
Salamat =
String.valueOf(Ealamat.getText());
Sortu = String.valueOf(Eortu.getText());
if (Snama.equals("")){
Enama.requestFocus();
Toast.makeText(MainUpDel.this,
"Silahkan isi nama",
Toast.LENGTH_SHORT).show();
} else if (Sttl.equals("")){
Ealamat.requestFocus();
Toast.makeText(MainUpDel.this,
"Silahkan isi kelas",
Toast.LENGTH_SHORT).show();
Eortu.requestFocus();
Toast.makeText(MainUpDel.this,
"Silahkan isi kelas",
Toast.LENGTH_SHORT).show();
} else {
db.UpdateMahasiswa(new Mahasiswa(Snama,
Sttl, Sagama, Sgender, Salamat, Sortu));
Toast.makeText(MainUpDel.this, "Data
telah diupdate",
Toast.LENGTH_SHORT).show();
finish();
}
}
});
Button btnDelete = (Button)
findViewById(R.id.btn_del);
btnDelete.setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View view) {
db.DeleteMahasiswa(new Mahasiswa(Snama,
Sttl, Sagama, Sgender, Salamat, Sortu));
Toast.makeText(MainUpDel.this, "Data telah
dihapus",
Toast.LENGTH_SHORT).show();
finish();}
});

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VIII-31

}
}

Source code Activity_main_updel.xml :


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:gravity="center"
android:orientation="vertical"
tools:context=".Database.pro_crud.MainUpDel">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello welcome to Update and Delete"
/>
<EditText
android:id="@+id/updel_nama"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:hint="Nama" />
<EditText
android:id="@+id/updel_alamat"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:hint="Alamat" />
<EditText
android:id="@+id/create_ortu"
android:hint="Ortu"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/btn_up"
android:layout_marginTop="20dp"
android:text="UPDATE"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/update_color"/>
<Button
android:id="@+id/btn_del"
android:text="DELETE"
Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VIII-32

android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:background="@color/delete_color"/>
</LinearLayout>

Hasil Tampilan :

Gambar 8.1 Tampilan Halaman Awal

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VIII-33

Gambar 8.2 Tampilan Halaman Register

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VIII-34

Gambar 8.3 Tampilan Halaman Login

Gambar 8.4 Tampilan Halaman Home

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VIII-35

Gambar 8.5 Tampilan Halaman Tambah Data

Gambar 8.6 Halaman Tampil Data

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
VIII-36

Gambar 8.7 Halaman Tampilan About

VIII.4 Kesimpulan
1. Aplikasi ini menggunakan element Recycler View, Card View, List
View, Custom Toolbar, dan Circle Image View.
2. Aplikasi ini menggunakan penyimpanan data dengan SQLite.
3. Aplikasi ini menggunakan penyimpanan data login dengan Firebase.
4. Aplikasi ini berguna selain untuk memberikan informasi tentang data
pendaftaran, tetapi juga untuk melakukan CRUD pada data pendaftaran
mahasiswa

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
IX-1

BAB IX
KESIMPULAN
1. Intent berfungsi untuk melakukan perpindahan activity dan dapat membawa atau
mengirimkan data serta untuk mengambil gambar dari smartphone, dan juga
intent di bagi menjadi dua jenis yaitu implisit dan explisit.
2. Fragment merupakan fungsi yang dimana membuat tampilan aplikasi lebih
efisien, karena dengan menggunakan fragment pemprogram tidak perlu banyak
menggunakan activity untuk membuat tampilan aplikasinya.
3. Navigation Drawer merupakan sebuah navigasi yang memudahkan user untuk
melihat menu yang ada di aplikasi.
4. Action Bar merupakan sebuah tampilan yang pasti ada di setiap aplikasi android.
Yang dimana posisi dari action bar ini berada di header untuk menampilkan
judul dari aplikasi.
5. RecyclerView merupakan list data yang tersusun secara berurutan kebawah mau
pun kesamping. Recyclerview ini juga merupakan sebuah tumpukan data yang
banyak untuk menampilkan banyak data.
6. Background Proses merupakan sebuah servis yang berjalan di belakang layar
yang melakukan setiap proses tidak diketahui oleh user. Hasil dari proses ini
biasanya berupa notifikasi dari aplikasi.
7. SQLite Database merupakan database internal dimiliki oleh android studio
yang bersifat offline. Untuk memori penampungan yang dimiliki oleh database
ini terbatas tergantung dari smartphone yang digunakan.
8. Rest Api dibagi menjadi dua jenis yaitu cloud dan localhost. Untuk API cloud
biasanya terdapat di website, dan untuk localhost biasanya menggunakan
webservis dan harus membuat file json.
9. Retrofit merupakan library android yang dibuat oleh Square yang digunakan
sebagai REST Client pada Android, yang pasti akan memudahkan kita.
10. Volley merupakan produk yang diperkenalkan oleh Google untuk mempermudah
pertukaran data tanpa harus membuat deretan kode yang sangat panjan

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :
IX-2

DAFTAR PUSTAKA

Laboratorium Pemrograman dan RPL. 2019. Modul Panduan Praktikum Mobile


Progaming. Laboratorium Pemrograman Insitut Teknologi Nasional Malang.

Tulisan Ndeso. 2018. Pengertian Android Studio dan Berbagai Macam Bagiannya.
https://medium.com/@tulisanndeso/pengertian-android-studio navigation-bar.html
(9 November 2019)

Hanamaze. 2016. Membuat Tombol Back Pada Action Bar Di Android Studio.
https:/www.kucingtekno.com/2016/11/membuat-tombol-back-pada-navigation-
bar.html (12 November 2019)

Mgbemena, Chike. 2018. Cara Membuat Kode Navigasi Drawer untuk Sebuah
Aplikasi Android. https:/code.tutsplus.com/id/tutorials/how-to-code-a-navigation-
drawer-in-an-app-cms-32063 (12 November 2019)

Santoso, Bagus Aji. 2017. Menggunakan ActionBar di Android .


https://www.codepolitan.com/menggunakan-actionbar-di-android 594d4793a8d77e
(26 November 2019)

Elfrida, Heddiaty D. 2016. Tips Mengirim Data Antar Activity di Android Studio.
https:/www.dicoding.com/blog/tips-mengirim-data-antar-activity-di-android-studio/
(10 Desember 2019)

Nama Aslab Asistensi TTD :

Reynaldo Ferdian Saputra

Tanggal :

Anda mungkin juga menyukai