Anda di halaman 1dari 129

Microservice, Trend Arsitektur Masa Kini !

Copyright

ii | Copyright
Persembahan

Microservices | iii
Kata Pengantar

Asdasdsa

— Alam Rahmatulloh, Developer,


Informatics Lecturer at Siliwangi University
Tasikmalaya – Indonesia

iv | Kata Pengantar
Daftar Isi

Copyright ....................................................................................... ii
Persembahan ................................................................................ iii
Kata Pengantar.............................................................................. iv
Daftar Isi ........................................................................................ v
Arsitektur Tunggal dan Arsitektur Berbasis Layanan.......................... 1
A. Monolithic Architecture ........................................................ 2
B. Service Oriented Architecture (SOA) .................................... 6
C. Microservices Architecture ................................................... 6
D. Perbandingan Kemampuan Arsitektur ................................. 6
XML (eXtensible Markup Language)................................................. 7
A. Pengertian XML...................................................................... 7
B. Struktur Penulisan Dokumen XML ........................................ 8
C. XML dengan PHP dan MySQL ................................................ 9
a. Membuat File XML................................................................. 9
b. Menambah Data XML ............................................................ 9
D. Parsing Data XML ke Android ................................................ 9
JSON (JavaScript Object Notation) ................................................. 10
A. Pengertian JSON .................................................................. 10
B. Struktur Penulisan JSON ...................................................... 10
C. JSON dengan PHP dan MySQL ............................................ 11
D. Parsing Data JSON ke Android............................................. 11
E. JSON Web Token (JWT) ....................................................... 11
Software Pendukung Developer .................................................... 16
A. Virtualisasi (VMWare, VirtualBox, Docker Container) ....... 16
B. Instalasi Java JDK (Java Development Kit) .......................... 17
C. Instalasi Android Studio & SDK (Software Development
Kit) 28
D. Plugin ADT (Android Development Tools) .......................... 42
E. Instalasi XAMPP ................................................................... 42
F. Instalasi Visual Studio Code................................................. 53

Microservices | v
Pengenalan User Interface (UI) ...................................................... 61
A. Mengenal Layout ................................................................. 62
B. Linear Layout........................................................................ 62
C. Table Layout ......................................................................... 64
D. Relative Layout..................................................................... 67
E. Absolute Layout ................................................................... 68
F. Mengenal View .................................................................... 73
G. Basic View ............................................................................ 73
H. List View ............................................................................... 73
Intent........................................................................................... 74
A. Program Intent Sederhana .................................................. 74
B. Program Intent disertai Menu Pilihan ................................ 74
AsyncTask .................................................................................... 75
A. Bentuk Penulisan subClass AsyncTask ................................ 75
B. Parameter dalam AsyncTask ............................................... 75
C. Metode-Metode dalam AsyncTask ..................................... 75
D. Cara Mengupgrade Versi Android ...................................... 75
Membuat Project Android dengan Monolithic Architecture ............ 76
A. Program Catatan Harian Portable....................................... 77
Membuat Project Android dengan Service Oriented Architecture .. 121
A. Pembuatan Web Service ................................................... 121
B. Operasi CRUD dengan XML ............................................... 121
a. Dari Sisi Server (PHP) ......................................................... 121
b. Dari Sisi Client (Android).................................................... 121
C. Operasi CRUD dengan JSON.............................................. 121
a. Dari Sisi Server (PHP) ......................................................... 121
b. Dari Sisi Client (Android).................................................... 121
Membuat Project Android dengan Microservices Architecture ...... 122
A. Pembuatan Web Service ................................................... 122

vi | Daftar Isi
BAB 1
Arsitektur Tunggal dan
Arsitektur Berbasis Layanan

“When services are loosely coupled, a change to one


service should not require a change to another.” —
Sam Newman, Building Microservices.

Pola arsitektur yang sedang trend saat ini menjadi


perbincangan para pakar IT adalah Microservice.
Lalu apakah yang dimaksud Microservice? Apa
keuntungannya? Perbedaannya dengan Service
Oriented Architecture?

Istilah Arsitektur Microservice mulai muncul pada


beberapa tahun terakhir ini, untuk menggambarkan
cara khusus dalam merancang suatu aplikasi
perangkat lunak sebagai rangkaian layanan yang
dapat digunakan secara independent. Meskipun
belum ada istilah khusus yang sudah di-amini oleh
para pakar IT dalam maupun luar negeri, ada yang
mengatakan bahwa microservice hanyalah
pengembangan dari Service Oriented Architecture
(SOA). Ada juga yang mengatakan berbeda dengan
SOA.

Arsitektur microservice maupun SOA merupakan


arsitektur berbasis layanan, yang berarti keduanya
memiliki pola arsitektur yang memberikan
penekanan besar pada layanan sebagai komponen
arsitektur utama yang digunakan untuk

Arsitektur Tunggal dan Arsitektur Berbasis Layanan | 1


mengimplementasikan dan menjalankan fungsi
bisnis maupun non bisnis. Meskipun microservices
dan SOA mempunya gaya arsitektur yang sangat
berbeda, keduanya memiliki banyak karakteristik.

Satu hal yang sama-sama dimiliki oleh arsitektur


berbasis layanan adalah arsitektur tersebut secara
umum didistribusikan, yang berarti bahwa
komponen layanan diakses dari jarak jauh melalui
semacam protocol akses jarak jauh, misalnya:
Representational State Transfer (REST), Simple
Object Access Protocol (SOAP), Java Message Service
(JMS), Microsoft Message Queuing (MSMQ), Remote
Method Invocation (RMI), atau .NET Remoting.

Arsitektur terdistribusi menawarkan keuntungan


yang sangat signifikan dibandingkan arsitektur
berbasis monolitik, termasuk skalabilitas yang lebih
baik, decoupling yang lebih baik, dan control yang
lebih baik terhadap development, testing, dan
deployment. Komponen dalam arsitektur
terdistribusi cenderung mandiri, memungkinkan
untuk kontrol perubahan yang lebih baik dan
pemeliharan yang lebih mudah sehingga semuanya
mengarah ke bagaimana menghasilkan aplikasi yang
lebih kuat dan lebih responsive. Arsitektur
terdistribusi juga cocok untuk aplikasi yang lebih
loosely coupled dan modular.

A. Monolithic Architecture
Monolith berarti semua terdiri dalam satu bagian
(sepaket). Aplikasi dengan arsitektur monolithic
menggambarkan perangkat lunak terdiri pada satu
tingkat dimana komponen-komponen yang berbeda
digabungkan menjadi satu program utuh pada satu
platform tunggal.

2 | Arsitektur Tunggal dan Arsitektur Berbasis Layanan


Contoh untuk pendekatan monolitik dapat dilihat
pada gambar 1 yaitu aplikasi online shop. Online
shop memberika otorisasi kepada pelanggan,
melakukan pemesanan, memeriksa inventaris
produk, mengesahkan pembayaran, dan
mengirimkan produk yang dipesan. Aplikasi ini
terdiri dari beberapa komponen termasuk
antarmuka pengguna online shop untuk pelanggan
dengan tampilan berbasis web bersama dengan
beberapa layanan backend untuk memeriksa
inventaris produk, mengesahkan dan membebankan
pembayaran serta pesanan pengiriman.

Meskipun memiliki komponen atau modul atau


layanan yang berbeda, aplikasi ini dibangun dan
digunakan sebagai satu Aplikasi untuk semua
platform misalnya desktop, seluler, dan tablet
dengan menggunakan RDBMS tunggal sebagai
sumber data.

Gambar 1. Arsitektur Monolitik

Manfaat:
 Mudah dikembangkan. Ketika awal
pembuatan suatu proyek, jauh lebih mudah
digunakan dengan Arsitektur Monolitik.
 Mudah diuji. Kita dapat melakukan pengujian
hanya dengan satu tools seperti Selenium
(https://www.seleniumhq.org), atau Selenium
IDE langsung pada browser Chrome

Arsitektur Tunggal dan Arsitektur Berbasis Layanan | 3


(https://chrome.google.com/webstore/detail/
selenium-
ide/mooikfkahbdckldjjndioackbalphokd),
Mozilla (https://addons.mozilla.org/en-
US/firefox/addon/selenium-ide/)
 Mudah digunakan. Kita tinggal COPAS alias
menyalin aplikasi dalam satu folder ke server.
 Mudah untuk melakukan pengukuran
dengan menjalankan banyak salinan di
belakang load balancing.

Kekurangan:
 Sulitnya pemeliharaan (maintenance). Jika
Aplikasi terlalu besar dan kompleks untuk
dipahami sepenuhnya, sehingga sulit untuk
melakukan perubahan dengan cepat dan
benar.
 Ukuran aplikasi dapat memperlambat waktu
start-up karena semua dalam satu paket
(bundling).
 Harus melakukan deployment ulang secara
keseluruhan setiap ada pembaruan atau ada
perbaikan (patching).
 Keandalan. Bug dalam modul apa pun
misalnya kebocoran memori berpotensi dapat
menurunkan seluruh proses. Terlebih lagi,
karena semua instance aplikasi identik, bug
itu memengaruhi ketersediaan seluruh
aplikasi
 Sulit untuk mengadopsi teknologi baru dan
maju. Karena perubahan dalam bahasa atau
kerangka kerja mempengaruhi seluruh
aplikasi.

Seperti pada proyek pembuatan Sistem Informasi


Manajemen Keuangan (SiMangga) (Rahmatulloh &
Husen, 2017), walaupun aplikasi tersebut telah
menggunakan konsep Model View Controller (MVC)
namun hal tersebut masih tergolong kedalam
arsitektur tunggal. SiMangga hanya menggunakan

4 | Arsitektur Tunggal dan Arsitektur Berbasis Layanan


satu database, satu paket source code dan tidak
dapat berinteraksi dengan aplikasi lain dengan
Bahasa pemrograman yang berbeda, database,
maupun platform berbeda. Sehingga setiap ada
perbaikan atau pembaruan diperlukan waktu dan
tenaga yang ekstra karena kompleksitas aplikasi
tersebut yang semakin besar.

Contoh lain aplikasi dengan arsitektur monolitik


telah dikembangkan dengan konsep sistem
terdistribusi, menerapkan load balancing web server
menggunakan HAProxy (Rahmatulloh & MSN, 2017).
Meskipun beban server telah didistribusikan
kedalam beberapa server, namun hal tersebut
berdampak pada proses maintenance jauh lebih sulit
dilakukan karena setiap perubahan berarti harus
melakukan perubahan juga pada semua server.

Gambar 2. Ilustrasi Arsitektur Monolitik

Untuk lebih jelasnya ilustrasi arsitektur monolitik


seperti gambar 2 jika di umpamakan kedalam
kehidupan sehari-hari dapat diumpamakan seperti
pedagang kaki lima (PKL), dimana pedagang yang

Arsitektur Tunggal dan Arsitektur Berbasis Layanan | 5


melayani konsumen dan diapula yang membuat
makanan untuk konsumen. Modal yang dibutuhkan
memang kecil, namun ketika banyak pembeli datang
dalam satu waktu maka pedagangpun akan sulit
melayani dan pembeli akan merasa bosan menunggu
pesanan yang tidak cepat datang.

B. Service Oriented Architecture (SOA)


Seiring berkembang pesatnya teknologi dengan
berbagai penerapan pada beragam platform
menjadikan arsitektur monolithic mulai ditinggalkan.
Permasalahan muncul, bagaimana agar sistem dapat
diakses multi-platform, saling terkait dan dapat
berkomunikasi satu sama lainnya.

C. Microservices Architecture

D. Perbandingan Kemampuan
Arsitektur

6 | Arsitektur Tunggal dan Arsitektur Berbasis Layanan


BAB 2
XML (eXtensible Markup
Language)

A. Pengertian XML
Menurut W3Schools XML merupakan singkatan dari
eXtensible Markup Language, merupakan Bahasa
markup seperti HTML yang dirancang untuk
menyimpan dan mengantarkan data dan bersifat
deskriptif sendiri (independent dan mendefinisikan
TAG sendiri) (W3School, n.d.-a).

Perbedaannya dengan HTML yaitu XML dibuat untuk


menyimpan dan membawa data, akan tetapi
tujuannya bukan untuk menggantikan peran
Database, sedangkan HTML didesain untuk
menampilkan data. Nama TAG pada HTML sudah
baku, akan tetapi pada XML nama TAG dapat
diciptakan sendiri.

Contoh penerapan XML:

 XML digunakan sebagai pertukaran data


pada Application Programming Interface (API).
 XML digunakan untuk membentuk struktur
form pada pemrograman desktop seperti
Delphi, Lazarus, Visual Basic, dan lain
sebagainya.
 XML digunakan untuk membuat layout
aplikasi Android.

XML (eXtensible Markup Language) | 7


 XML bertugas untuk membentuk struktur
proyek pada Java yang menggunakan Maven.
 XML digunakan sebagai format file DOCX,
XLSX, dan lain sebagainya

Sudah banyak contoh penerapan XML diantaranya


digunakan dalam beberapa penelitian seperti
penerapan Simple Object Access Protocol (SOAP)
dalam penelitian (Gunawan & Rahmatulloh, 2018).
XML digunakan untuk melakukan pertukaran data
pada sistem informasi akademik dan sistem
keuangan di Bank. Data yang dipertukarkan yaitu
tagihan keuangan serta hasil pembayaran
mahasiswa. Selain itu juga XML digunakan pada
RESTful dalam penelitian (Rizal & Rahmatulloh,
2019), sebagai pertukaran data peminjaman buku di
perpustakaan dengan sistem informasi akademik.

B. Struktur Penulisan Dokumen XML

Gambar 3. Struktur Dokumen XML

Struktur dokumen XML terdiri dari beberapa bagian,


diantaranya:
1. Deklarasi, merupakan bagian untuk
menyimpan versi XML yang akan digunakan.
2. Attribut, berisi keterangan tambahan dari
sebuah objek.
3. Elemen, berisi TAG yang mendefinisikan
sebuah data objek

8 | XML (eXtensible Markup Language)


4. TAG pembuka dan TAG penutup
5. Isi Elemen

C. XML dengan PHP dan MySQL

a. Membuat File XML

b. Menambah Data XML

D. Parsing Data XML ke Android

XML (eXtensible Markup Language) | 9


BAB 3
JSON (JavaScript Object
Notation)

A. Pengertian JSON
Java Script Object Notation atau biasa disebut JSON
merupakan format pertukaran data yang bersifat
independent (stateless) yang tidak bergantung pada
Bahasa pemrograman manapun. JSON
menggunakan sintaksis JavaScript, tetapi format
JSON hanya teks. Teks dapat dibaca dan digunakan
sebagai format data oleh bahasa pemrograman apa
pun (W3School, n.d.-b).

JSON sangat ringan dan mudah dibaca oleh


manusia maupun diterjemahkan oleh mesin.
Sehingga format JSON menjadi alternative yang lebih
baik dari XML.

B. Struktur Penulisan JSON


Sebuah objek JSON merupakan format data key-
value yang biasanya dibuka dengan kurung kurawal
buka “{“ dan diakhiri dengan kurung kurawal tutup
“}”. Setiap nama diikuti dengan titik dua “:” dan
setiap pasangan nama/nilai dipisahkan oleh koma
“,”. JSON disimpan dalam sebuah file .json atau dapat

10 | JSON (JavaScript Object Notation)


disimpan sebagai objek JSON atau string dalam
sebuah program.

Contoh objek JSON:

{
"first_name" : "Yasmin", "last_name" :
"Almaira",
"location" : "Tasikmalaya",
"online" : true,
"followers" : 9876
}

Setiap key-value dipisahkan oleh tanda koma,


sehingga ditengah atau isi dari sebuah data JSON
terlihat seperti ini: “key” : “value”, “key” : “value”, “key” : “value”.
Pada contoh JSON diatas nilai pertama pasangan
key-value adalah “first_name” : “Yasmin”. Key JSON berada
di sebelah kiri tanda titik dua, dibungkus oleh tanda
petik dua seperti “key” dan dapat berisi string apapun.
Didalam setiap objek, key harus unik. Value JSON
ada di sebelah kanan tanda titik dua. Ada enam tipe
data dasar yang bisa dipakai untuk mengisinya
yaitu: strings, number, object, arrays, Booleans, null.

C. JSON dengan PHP dan MySQL

D. Parsing Data JSON ke Android

E. JSON Web Token (JWT)


JSON Web Token atau disingkat JWT merupakan
standar terbuka (RFC 7519) (Jones, Bradley, &
Sakimura, 2015) yang mendefinisikan cara yang
ringkas dan mandiri untuk mentransmisikan
informasi antar pihak secara aman sebagai objek
JSON. JWT ini adalah sebuah token berbentuk string

JSON (JavaScript Object Notation) | 11


JSON yang sangat padat (ukurannya), informasi
mandiri yang gunanya sendiri untuk melakukan
sistem autentikasi dan pertukaran informasi. Karena
bentuknya kecil, token JWT dapat dikirim melalui
URL, parameter HTTP POST atau di dalam Header
HTTP dan juga karena ukurannya yang kecil maka
dapat ditransmisikan dengan lebih cepat. Disebut
informasi mandiri karena isi dari token yang
dihasilkan memiliki informasi dari user yang
dibutuhkan, sehingga tidak perlu query ke database
lebih dari satu kali. Token tersebut dapat diverifikasi
dan dipercaya karena sudah di-sign secara digital.
Token JWT bisa di-sign dengan menggunakan secret
(algoritma HMAC) atau pasangan public / private key
(algoritma RSA atau ECDSA).

Pada proses login yang dilakukan tidak seperti


aplikasi Website biasa, namun menggunakan session
untuk mengingat yang sedang melakukan proses
login. Tetapi dalam API hanya menggunakan konsep
JWT yang bisa disebut "jot" (Jwt.io, 2017). JWT tidak
tergantung sama bahasa program tertentu. Struktur
JWT terdiri dari 3 bagian yang dipisahkan oleh titik
(“.”) yaitu header, payload dan signature dapat dilihat
pada gambar 3.

xxxxxx.yyyyyyy.zzzzzzzzz
header.payload.signature
Gambar 4. Struktur JSON Web Token.

Header biasanya terdiri dari 2 bagian : tipe token


yaitu JWT dan algoritma hashing yang akan
digunakan, seperti HMAC SHA-256, RSA atau
ECDSA. Contoh header dapat dilihat pada gambar 4.

{
“alg” : “HS256”,
“typ” : “JWT”,
}

12 | JSON (JavaScript Object Notation)


Gambar 5. JWT Header.

Payload, bagian kedua berisi klaim. Klaim adalah


pernyataan tentang suatu entitas (biasanya,
pengguna) dan metadata tambahan. Ada 3 jenis
klaim : reserved, public dan private claims. Bagian
kedua (payload) dapat dilihat pada gambar 5.

{
“sub”: ”123456789”,
“name”: “Raffan Mauza”,
“admin”: true
}
Gambar 6. JWT Payload.

Bagian ketiga dari JWT adalah signature berisi hash


dari komponen-komponen header, payload dan
kunci rahasia. Contoh JWT Signature ini
menggunakan algoritma HMAC SHA-256, signature
dapat dibuat dengan cara seperti pada gambar 6.

HMACSHA256(
base64UrlEncode(header)+”.”+
base64UrlEncode(payload),
secret)
Gambar 7. JWT Signature.

Outputnya adalah tiga string Base64 dengan


persamaan (1) yang dipisahkan oleh titik-titik yang
dapat dengan mudah dilewatkan dalam HTML dan
HTTP.

𝑻𝒐𝒌𝒆𝒏 = 𝑓(𝐵𝑎𝑠𝑒64𝐸𝑛𝑐𝑜𝑑𝑒) ∑ (ℎ𝑒𝑎𝑑𝑒𝑟. 𝑝𝑎𝑦𝑙𝑜𝑎𝑑. 𝑠𝑖𝑔𝑛𝑎𝑡𝑢𝑟𝑒) (1)


𝑛=𝛼,𝛽

Sehingga hasil gabungan string tersebut seperti


contoh pada gambar 7.

JSON (JavaScript Object Notation) | 13


eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJrZF9wZWdhd2FpIj
oiUC0wMDYiLCJ1c2VybmFtZSI6InphbCIsImlhdCI6MTUyNzM5N
zIyMywiZXhwIjoxNTMwMDI2OTY5fQ.FqHaqcJUOgXlSIg1Q7Mu
BhpqkWEqdGIAovzPOxqV2jg
Gambar 8. Contoh JWT

Apabila isi Header atau Payload dirubah maka isi


Signature menjadi tidak valid. Signature dibentuk
dengan menggunakan header dan payload sehingga
JWT mampu memberikan kemudahan bagi client
untuk mengakses sumberdaya tanpa harus login
berulang memasukan username password. Token
dapat dipanggil melalui AJAX ke server karena
panggilan dapat menggunakan header HTTP untuk
mengirimkan informasi penggunanya (Rahmatulloh,
Sulastri, & Nugroho, 2018). Secara umum cara kerja
JWT dapat dilihat pada gambar 8.

Gambar 9. Cara Kerja JWT

Menurut Rahmatulloh dalam penelitian


(Rahmatulloh, Gunawan, & Nursuwars, 2019) yang
membandingkan performa algoritma yang dapat
digunakan pada JWT yaitu HMAC, RSA dan ECDSA.
Didapatkan hasil bahwa penggunaan HMAC paling
unggul, baik dari parameter waktu generate token,
ukuran token maupun kecepatan transfer token.

14 | JSON (JavaScript Object Notation)


Gambar 10. Perbandingan Kinerja Waktu Transfer Data Token Menggunakan
Algoritma HMAC, RSA & ECDSA

JSON (JavaScript Object Notation) | 15


BAB 4
Software Pendukung
Developer

A. Virtualisasi (VMWare, VirtualBox,


Docker Container)
Virtualisasi merupakan pembuatan versi maya
(virtual) dari satu atau beberapa sumber daya
(resource) tertentu sehingga pada satu sumber daya
fisik dapat dijalankan dengan spesifikasi tertentu
yang tidak melebihi sumber daya fisiknya.

Sampai saat ini sumber daya yang dapat


divirtualisasikan antara lain yaitu perangkat keras
(hardware), operating system (OS), media
penyimpanan (storage), layanan jaringan
(networking), dan layanan lainnya yang masih terus
berkembang.

Adanya virtualisasi dikarenakan perkembangan


teknologi hardware yang sangat pesat menyebabkan
kemampuan sebuah sumber daya fisik sangat jauh
diatas tuntutan pengguna, sehingga sebagian besar
waktu dan kapasitasnya tidak terpakai. Kapasitas
atau resource inilah yang digunakan dengan
menjalankan atau menyimpan beberapa sumber
daya lain secara virtual sehingga mampu
menghasilkan efisiensi yang lebih tinggi.

16 | Software Pendukung Developer


VMWare
asdasdasd

VirtualBox
Docker Container
asdasdasd

B. Instalasi Java JDK (Java


Development Kit)
Java Development Kit atau yang biasa disingkat JDK
merupakan Software yang digunakan untuk
melakukan proses kompilasi dari Java Code ke
bytecode. Karena project akhir dalam buku ini
menggunakan Android Studio, tentu JDK wajib
terinstall di Komputer kamu. Berikut cara instalasi
Java Development Kit:

Pertama, Tentuya kamu harus memiliki file instalasi


JDK itu sendiri. Kamu bisa mengunduh file tersebut
dilaman resmi JDK, pada project kali ini
menggunakan JDK versi 11 yang bisa kamu unduh
di [LINK].

Kedua, Ketika kamu sudah buka laman


pengunduhan diatas, scroll kebawah hingga kamu
menemukan tulisan seperti pada gambar 4.1

Software Pendukung Developer | 17


Gambar 4.1 Laman unduh JDK 11

Ketiga, klik radiobutton dengan tulisan ‘Accept


Licence Agreement’ supaya kamu bisa mengunduh
file instalasi. Kemudian kamu klik tulisan biru yang
sejajar dengan OS yang terinstall didalam Komputer
kamu, sebagai contoh OS yang saya gunakan adalah
Windows 10 64 bit maka file yang saya unduh
adalah ‘jdk-11.0.5_windows-x64_bin.exe’.

Keempat, Klik 2 kali file installer yang telah kamu


unduh. Maka akan tampil windows seperti gambar
4.2 yang berisikan informasi file JDK yang akan di
install.

18 | Software Pendukung Developer


Gambar 4.2 Welcome Page instalasi JDK

Kelima, Klik tombol Next untuk melanjutkan proses


instalasi. Pada windows berikutnya akan
disuguhkan menu fitur-fitur apa saja yang ingin
kamu install dan path/lokasi penyimpanan file JDK.
Saran saya, biarkan default apa adanya seperti
Gambar 4.3 kemudian klik Next untuk memulai
proses instalasi.

Software Pendukung Developer | 19


Gambar 4.3 Fitur dan Path JDK

Keenam, Tunggu beberapa saat sampai proses


instalasi selesai. Ketika proses instalasi selesai maka
akan tampil windows seperti gambar 4.4, kamu
dapat menutup windows tersebut dengan mengklik
tombol Close.

20 | Software Pendukung Developer


Gambar 4.4 JDK berhasil diinstal

Proses instalasi JDK telah berhasil. Namun belum


siap untuk digunakan karena kita belum melakukan
pengaturan path JDK kedalam Komputer kita, Mari
lanjut ketahap berikutnya.

Ketujuh, Kamu buka path instalasi JDK yang telah


kamu install sebelumnya. Jika kamu biarkan default
biasanya terinstall di dalam direktori ‘C:\Program
Files\Java\jdk-11.0.5\bin’. Kamu Salin path bin
instalasi JDK tersebut yang nantinya akan kita
masukan kedalam pengaturan path JDK, perhatikan
Gambar 4.5

Software Pendukung Developer | 21


Gambar 4.5 Path bin JDK

Kedelapan, Klik kanan pada this PC/My Computer


kemudian kamu pilih properties seperti Gambar 4.6
untuk membuka informasi dasar tentang computer
kamu

Gambar 4.6 Properties

Kesembilan, pada menu yang terdapat disebelah kiri


windows klik Advenced system settings maka akan
terbuka windows System properties

22 | Software Pendukung Developer


Gambar 4.7 Advenced system settings

Kesepuluh, klik tombol yang bertulisan Environment


Variables sehingga akan terbuka windows yang
berisikan variable-variabel path yang digunakan oleh
system.

Software Pendukung Developer | 23


Gambar 4.7 System properties

Kesebelas, Klik pada Variable Path yang terdapat


pada System Variable kemudian klik tombol Edit
untuk menambahkan variable path JDK yang telah
kita salin sebelumnya.

24 | Software Pendukung Developer


1

Gambar 4.8 Environment Variable

Keduabelas, Klik tombol New untuk menambahkan


variable path bin JDK. Gambar 4.9 merupakan
contoh sebelum menambahkan path JDK dan
Gambar 4.10 adalah contoh path JDK telah
ditambahkan.

Software Pendukung Developer | 25


Gambar 4.9 Sebelum menambahkan path JDK

26 | Software Pendukung Developer


Gambar 4.10 Setelah menambahkan path JDK

Ketigabelas, Tutup semua Windows System


Properties.

1
3 2

Software Pendukung Developer | 27


Gambar 4.11 Selesai Menambahkan Path bin JDK

Proses instalasi JDK dan penambahan path bin JDK


juga telah selesai. Namun, bagaimana caranya kita
dapat memastikan JDK benar-benar dapat bekerja
pada komputer kita? Cara untuk mengetahui JDK
dapat berjalan dengan baik cukup mudah. Kamu
buka CMD dan ketikan perintah berikut:

java --version

Script diatas merupakan perintah agar menampilkan


versi dari java yang telah terinstall pada komputer
kita, jika output pada cmd kamu sama dengan
Gambar 4.12 maka sudah dapat dipastikan JDK
berhasil terinstall dengan baik.

Gambar 4.12 Menampilkan versi Java

C. Instalasi Android Studio & SDK


(Software Development Kit)
Setelah proses instalasi dan konfigurasi path JDK
telah selesai, maka langkah selanjutnya adalah
proses instalasi Android Studio sebagai editor
pengembangan aplikasi berbasis android.

28 | Software Pendukung Developer


Mengutip dari laman resminya developer.android.com
Android Studio adalah Integrated Development
Environment (IDE) untuk pengembangan aplikasi
Android, berdasarkan IntelliJ IDEA. Google
mengumumkan di tahun 2013 bahwa Android
Studio menjadi IDE resmi mengembangkan aplikasi
berbasis android serta tidak lagi mendukung secara
penuh eclipse. Berikut langkah instalasi Android
Studio:

Pertama, Unduh file instalasi Android Studio pada


laman resminya https://developer.android.com/studio dan
klik tombol Download Android Studio

Gambar 4.13 Laman Resmi Android Studio

Kedua, Klik 2 kali pada file yang telah terunduh.


Maka akan tampil windows seperti gambar 4.14

Software Pendukung Developer | 29


Gambar 4.14 Tampilan awal installer Android
Studio

Ketiga, Klik tombol Next maka akan tampil pilihan


Komponen yang akan diinstal. Biarkan tetap default
seperti gambar 4.15 agar mempermudah proses
instalasi.

30 | Software Pendukung Developer


Gambar 4.15 Komponen Android Studio

Keempat, Klik tombol Next untuk melakukan


konfigurasi path tempat kamu ingin menyimpan
aplikasi Android. Klik Browse jika kamu ingin
merubah lokasi penyimpanan atau langsung klik
tombol Next untuk melanjutkan proses instalasi.

Software Pendukung Developer | 31


Gambar 4.16 Path instalasi Android Studio

Kelima, Biarkan tetap default jika kamu ingin


membuat shortcuts Android Studio atau jika kamu
tidak ingin membuat shortcuts kamu centang kotak
yang bertuliskan ‘Do not create shortcuts’.

32 | Software Pendukung Developer


Gambar 4.17 Shortcuts Android Studio

Keenam, Klik tombol Install untuk memulai proses


instalasi tunggu beberapa saat sampai proses
instalasi selesai

Software Pendukung Developer | 33


Gambar 4.18 Proses instalasi Android Studio

Gambar 4.18 Proses instalasi Android Studio


Selesai

34 | Software Pendukung Developer


Proses instalasi Android Studio memang telah
selesai, namun belum dengan SDK nya. File installer
SDK terdapat di Android Studionya itu sendiri oleh
sebab itu kamu harus menjalankan Android
Studionya terlebih dahulu dengan cara klik tombol
finish dan biarkan ‘Start Android Studio’ seperti
Gambar 4.19 tercentang. Perlu kamu perhatikan
untuk proses instalasi SDK diperlukan koneksi
internet yang besar, Saya sarankan kamu
menggunakan Wifi sebagai sumber internet

Gambar 4.19 Memulai Android Studio

Ketujuh, Pilih Do not import settings jika kamu baru


pertama kali menggunakan android studio kemudian
klik tombol OK.

Software Pendukung Developer | 35


Gambar 4.20 Import Setting Android Studio

Jika terdapat notifikasi seperti gambar 4.21 kamu


bisa pilih ‘Send usage statistics to Google’ untuk
mengirimkan static pemakaian Android Studio atau
kamu bisa memilih ‘Don’t Send’ untuk tidak
mengirimkan apapun ke Google.

Gambar 4.21 Data Sharing Android Studio

Ketujuh, Ketika kamu pertama kali membuka


Android Studio kamu bakal disuguhkan tampilan
seperti Gambar 4.22 Kamu bisa langsung klik tombol
Next untuk melanjutkan proses Installing SDK.

36 | Software Pendukung Developer


Gambar 4.21 Tampilan awal Android Studio

Kedelapan, Pilih Standard untuk menginstall semua


komponen dan pengaturan yang direkomendasikan
kemudian Klik Next.

Software Pendukung Developer | 37


Gambar 4.22 Type of setup Android Studio

Kesembilan, Pilih tema yang kamu inginkan


kemudian klik Next.

Gambar 4.23 Tema Android Studio

Kesepuluh, Pada tahap ini akan ditampilkan semua


detail informasi yang akan kamu unduh. Pastikan
kembali apakah koneksi kamu berjalan dengan baik,
jika Ya klik tombol Finish untuk mulai mengunduh
SDK yang diperlukan.

38 | Software Pendukung Developer


Gambar 4.24 Verifikasi SDK Android Studio

Kesebelas, Proses pengunduhan akan dimulai.


Kamu bisa melihat detail apa saja yang telah
berhasil di unduh dengan menekan tombol ’Show
Details’, jika proses pengunduhan selesai maka akan
tampil seperti Gambar 4.26

Software Pendukung Developer | 39


Gambar 4.25 Proses pengunduhan SDK

Gambar 4.26 Pengunduhan SDK selesai

Proses instalasi Android Studio dan SDK telah


berhasil, maka ketika kamu membuka Android

40 | Software Pendukung Developer


Studio untuk pertama kali akan tampil seperti
gambar 4.27

Gambar 4.27 Android Studio

Perlu kamu ketahui sebagai pengguna baru Android


Studio, jika kamu menemukan Popup notifikasi
seperti gambar 4.28 kamu klik tombol ‘Allow Acces’
agar komputer kamu mengijinkan OpenJdk berjalan
sebagaimana mestinya.

Software Pendukung Developer | 41


Gambar 4.28 Allow Acces OpenJDK

D. Plugin ADT (Android Development


Tools)

E. Instalasi XAMPP
Teruntuk kamu yang ingin ingin membuat Website
namun belum memiliki domain dan hosting kamu
bisa menggunakan XAMPP sebagai alternative
sehingga kamu dapat membuat komputer kamu
seolah-olah sebagai server hosting pribadi kamu.
Berikut cara instalasi XAMPP :

Pertama, Unduh file instalasi XAMPP pada laman


resminya https://www.apachefriends.org/download.html,
pilih sesuai OS yang terinstall pada komputer kamu

42 | Software Pendukung Developer


Gambar 4.29 Laman Resmi XAMPP

Kedua, Klik 2 kali pada file yang telah terunduh.


Pada beberapa kondisi maka akan tampil peringatan
seperti pada Gambar 4.30 jika kamu tidak
menemukan Error maka kamu bisa lanjut ketahapan
Sekian.

Gambar 4.30 Error Instalasi XAMPP

Ketiga, Untuk mengatasi Error UAC kamu tutup


terlebih dahulu proses instalasi XAMPP sebelumnya
dengan menekan tombol X yang ada di pojok kanan
atas notif Warning. Jika Kamu telah menutup proses
instalasi, kamu bisa buka Control Panel seperti
Gambar 4.31

Software Pendukung Developer | 43


Gambar 4.31 Control Panel

Keempat, ketikan ‘Tools’ pada form pencarian dan


pilih menu Administrative Tools untuk membuka
kumpulan Tools yang ada pada Komputer kamu

Gambar 4.32 Pencarian tools Control Panel

Kelima, Pilih Local Scurity Policy Agar kita bisa


menonaktifkan UAC

44 | Software Pendukung Developer


Gambar 4.33 List Administrative Tools

Keenam, Pada Security Settings kamu pilih Local


Policies  Security Options untuk membuka
pengaturan UAC

Gambar 4.33 Security Options

Ketujuh, kamu ubah pengaturan UAC yang awalnya


Enabled menjadi Disabled seperti gambar 4.34

Software Pendukung Developer | 45


Gambar 4.34 UAC Disable

Kedelapan, buka kembali file installer XAMPP yang


telah kamu unduh sebelumnya. Maka akan muncul
tampian seperti Gambar 4.35 tanpa ada peringatan
Error UAC Seperti tahapan kedua, Klik Next untuk
memulai proses instalasi XAMPP

46 | Software Pendukung Developer


Gambar 4.35 Welcome to XAMPP

Kesembilan, biarkan tetap default seperti Gambar


4.36 kemudian klik tombol Next

Software Pendukung Developer | 47


Gambar 4.36 Komponen XAMPP

Kesepuluh, Klik tombol Icon folder jika kamu ingin


menempatkan file instalasi XAMPP di path yang lain
atau biarkan default seperti Gambar 4.37 dan
langsung klik tombol Next

48 | Software Pendukung Developer


Gambar 4.37 Instalasi folder XAMPP

Kesebelas, Akan muncul tampilan yang berisikan


informasi apakah kamu ingin mempelajari lebih
lanjut tentang XAMPP? Jika tidak kamu bisa
hilangkan ceklis pada tulisan Learn more about
Bitnami for XAMPP seperti Gambar 4.38

Software Pendukung Developer | 49


Gambar 4.38 Learn more about XAMPP

Keduabelas, XAMPP siap untuk diinstal. Klik tombol


Next maka proses instalasi akan dimulai seperti
Gambar 4.40

50 | Software Pendukung Developer


Gambar 4.39 XAMPP siap diinstall

Software Pendukung Developer | 51


Gambar 4.40 proses instalasi XAMPP

Ketigabelas, Ketika proses instalasi selesai maka


akan menampilkan informasi bahwa XAMPP telah
terinstall. Klik tombol Finish untuk menutup file
instalasi XAMPP.

Gambar 4.41 instalasi XAMPP selesai

Proses instalasi telah selesai, jangan lupa untuk


kembali mengaktifkan UAC pada Local Security Policy
seperti Gambar

52 | Software Pendukung Developer


Gambar 4.42 Enabled UAC

F. Instalasi Visual Studio Code


Visual Studio Code (VS Code) merupakan sebuah
text editor buatan Microsoft dan bersifat open source
sehingga kamu bisa menikmati tanpa perlu
menghawatirkan biaya pembelian text editor ini. Jika
kamu sudah memiliki Texteditor andalan kamu
sendiri seperti Subilime, Atom, Notepad++ atau
Texteditor lainnya kamu bisa Skip Poin ini dan lanjut
ke Bab selanjutnya.

Kenapa si pilih VS Code? Jawabannya karena VS


Code lebih ringan dan banyak sekali fitur-fitur yang
tersedia, diantaranya Intellisense, Git Integration,
Debugging, dan fitur ekstensi yang menambah
kemampuan teks editor. Selain itu, karena sifatnya
opensource maka mempermudah banyak developer
yang ikut andil meningkatkan kualitas VS Code.
Berikut cara instalasi VS Code :

Software Pendukung Developer | 53


Pertama, Unduh file instalasi VS Code pada laman
resminya https://code.visualstudio.com/download. Pilih file
installer sesuai OS yang terinstall pada komputer kamu.

Gambar 4.43 Laman resmi Visual Studio Code

Kedua, Klik 2 kali pada file yang telah terunduh.


Sehingga tampil windows yang berisi License
Agreement, Kamu bisa baca terlebih dahulu
lisensinya atau bisa langsung pilih I Accept the
agreement jika kamu menyetujuinya dan klik tombol
Next untuk melanjutkan proses berikutnya.

54 | Software Pendukung Developer


Gambar 4.44 License Agreement VS Code

Ketiga, Kamu bisa ubah tempat penyimpanan file VS


Code dengan klik tombol Browse. Jika kamu ingin
tetap seperti pengaturan default nya kamu bisa
langsung klik tombol Next

Software Pendukung Developer | 55


Gambar 4.45 Lokasi file terinstall VS Code

Keempat, Selanjutnya kamu bisa mengatur Start


Menu VS Code. Jika kamu tidak ingin membuat Start
Menu kamu bisa menghilangkan ceklik pada tulisan
Don’t create a Start Menu Folder kemudian klik
tombol Next

56 | Software Pendukung Developer


Gambar 4.46 Start Menu VS Code

Kelima, Pada tahapan ini kamu dapat melakukan


pengaturan apakah kamu akan menampilkan
Shortcut VS Code pada Desktop atau tidak? kamu
juga bisa mengatur pengaturan lainnya atau Kamu
bisa juga mengikuti saran pengaturan seperti
Gambar 4.47

Software Pendukung Developer | 57


Gambar 4.47 Shortcut VS Code

Keenam, Pada tahapan ini akan ditampilkan


informasi sekaligus pengaturan yang sebelumnya
telah kamu isi. Kamu bisa klik tombol Back untuk
kembali melakukan pengaturan jika tidak sesuai
dengan keinginan kamu atau klik tombol Install
untuk memulai proses instalasi.

58 | Software Pendukung Developer


Gambar 4.48 Ready to install VS Code

Ketujuh, Poses instalasi akan dimulai. Hilangkan


centang pada Launch Visual Studio Code jika kamu
tidak ingin menjalankan VS Code ketika proses
instalasi selesai, kemudian klik tombol Finish untuk
mengakhiri proses instalasi

Software Pendukung Developer | 59


Gambar 4.49 proses instalasi VS Code

Gambar 4.50 instalasi VS Code selesai

60 | Software Pendukung Developer


BAB 5
Pengenalan User Interface
(UI)

Apa yang pertama kali terbayang dalam pikiran


kamu ketika menemui istilah User Interface (UI)?
Tentu tidak asing jika kamu adalah seorang
programmer atau bidang lainnya dalam dunia IT.

Sederhananya UI merupakan sebuah media


visual grafis dimana dapat mempermudah interaksi
antara user dengan mesin. Biasanya juga UI
dijadikan sebagai ciri khas perusaahaan, sebagai
contohnya adalah perusahaan e-commerce yang ada
di Indonesia kita bisa membedakan perusahaan A
dan B hanya dengan melihat UI mereka tanpa harus
melihat domain yang tertulis pada address bar.

Menurut (Suteja & Harjoko, 2008) Pengguna


sering menilai sistem bukan dari fungsinya
melainkan dari user interfacenya. Jika desain user
interfacenya yang buruk, maka itu sering jadi alasan
untuk tidak menggunakan software. Selain itu
interface yang buruk menyebabkan pengguna
membuat kesalahan fatal. Oleh sebab itu dalam
pembuatan sebuah aplikasi, kita juga harus
memperhatikan User interfacenya.

Pada akhir proyek ini kita akan membuat sebuah


aplikasi berbasis android sebagai UI nya dan service
yang menggunakan arsitektur Monolithic, SOA, dan

Pengenalan User Interface (UI) | 61


Microservices. Oleh sebab itu, tidak ada salahnya
kita sedikit membahas tentang UI yang bisa kita
buat pada aplikasi berbasis Android.

A. Mengenal Layout
Layout adalah tata letak elemen desain terhadap
suatu bidang dalam media tertentu untuk
mendukung konsep/pesan yang dibawanya (Sutria,
2013). Karena pada kesempatan kita kali ini akan
lebih banyak menggunakan android studio, maka
dapat diartikan dalam arti yang lebih sempit Layout
pada android studio merupakan sebuah tataletak
yang mengatur penempatan gambar, teks ataupun
komponen lain sehingga terlihat rapih dan nyaman
ketika digunakan oleh pengguna.
Layout pada Android Studio memiliki banyak
jenis yang dapat kamu gunakan sesuai kebutuhan
aplikasi, diantaranya adalah Linear Layout, Table
Layout, Relative Layout dan Absolute Layout.

B. Linear Layout
Linear layout adalah layout yang menjajarkan
komponen-komponen yang ada didalamnya secara
horizontal ataupun vertikal dengan menggunakan
atribut android:orientation.
Semua komponen yang berada didalam
Linearlayout akan ditumpuk menjadi satu, jadi pada
Linearlayout berorientasi vertikal hanya akan
memiliki satu baris kekanan berapapun banyaknya
begitupula dengan Linearlayout yang berorientasi
horizontal hanya akan memiliki satu baris kebawah
sampai penutup Linearlayout itu sendiri.

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


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

62 | Pengenalan User Interface (UI)


s/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:orientation="vertical"
tools:context=".MainActivity">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="10dp"
android:background="#8BC34A"
android:layout_marginBottom="16dp"
android:layout_marginTop="16dp"
>

<EditText
android:layout_width="250dp"
android:layout_height="match_parent"
android:hint="Cari Apa?"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Cari"
android:layout_weight="1"
android:layout_gravity="right"

/>

</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="10dp"
android:background="#FFF59D"
android:layout_marginBottom="16dp"
android:layout_marginTop="16dp"
>

Pengenalan User Interface (UI) | 63


<EditText
android:layout_width="match_parent"
android:layout_height="match_parent"
android:hint="Email"/>
<EditText
android:layout_width="match_parent"
android:layout_height="match_parent"
android:hint="Password"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Login"
/>

</LinearLayout>

</LinearLayout>

Hasilnya akan seperti gambar dibawah ini :

Penjelasan :
1. Linearlayout berwarna biru merupakan
contoh penggunaan orintasi horizontal,
dimana setiap komponen akan terus mengisi
ruas secara horizontal.
2. Linearlayout berwarna merah merupakan
contoh penggunaan orientasi vertikal, dimana
setiap kompnen akan terus mengisi ruas
secara vertikal.

C. Table Layout
Seperti namanya Table Layout, dalam layout ini
dibangun dengan adanya Baris dan kolom. Pada
dasarnya Table layout mirip seperti Linear ayout,
dimana Baris pada tabel layout merupakan
linearlayout berorientasi horizontal dan kolom pada

64 | Pengenalan User Interface (UI)


tablelayout merupakan orientasi vertikal pada
linearlayout.
Hal pertama yang harus kamu lakukan untuk
membuat layout dengan jenis tabel adalah
menentukan jumlah baris dan kemudian
menentukan apa saja komponen yang akan
disimpan pada kolom table layout. Berikut contoh
desain sederhana menggunakan tabel layout :

<TableLayout
xmlns:android="http://schemas.android.com/apk/re
s/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>

<TableRow
android:paddingTop="25dp"
android:gravity="center"
android:layout_marginTop="20px">

<TextView
android:layout_width="wrap_content"
android:layout_gravity="center"
android:text="Selamat Datang..."
android:textColor="#388E3C"
android:textSize="25sp"
android:textStyle="bold" />

</TableRow>

<TableRow
android:layout_marginTop="20dip" >

<TextView
android:layout_width="wrap_content"
android:text="Email :"
android:textSize="18sp"
android:textColor="#000000"
android:layout_marginLeft="20dp"
></TextView>

<EditText
android:layout_height="wrap_content"

Pengenalan User Interface (UI) | 65


android:layout_marginRight="20dp"
android:layout_weight="1" >

</EditText>

</TableRow>

<TableRow
android:layout_marginTop="20dip" >

<TextView
android:layout_width="wrap_content"
android:text="Password :"
android:textSize="18sp"
android:textColor="#000000"
android:layout_marginLeft="20dp"
></TextView>

<EditText
android:layout_height="wrap_content"
android:layout_marginRight="20dp"
android:layout_weight="1" >

</EditText>

</TableRow>

<TableRow
android:gravity="center"
android:layout_marginTop="20dip" >

<Button
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_weight="1"
android:background="#388E3C"
android:textColor="#FFF59D"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:text="LOGIN"/>
</TableRow>

</TableLayout>

66 | Pengenalan User Interface (UI)


D. Relative Layout
Beda halnya dengan layout sebelumnya dimana
setiap komponen yang dimasukan kedalam layout
akan berurutan seperti pada linearlayout horizontal
yang terus mengisi layout secara horizontal dan
tidak bisa menentukan secara spesifik suatu
komponen berada diatas/bawah komponen lainnya.
Oleh sebab itu Relative layout hadir, relative layout
menempatkan setiap komponen yang ada seperti
layer dimana setiap layer bisa berada diatas atau
dibawah layer lainnya dengan kata lain
Relativelayout penataannya lebih bebas sehingga
bisa menempatkan setiap komponen dimana saja
tanpa ada aturan orientasi vertikal maupun
horizontal.

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


<RelativeLayout
xmlns:android="http://schemas.android.com/apk/re
s/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"
android:padding="10dp">

<EditText
android:id="@+id/email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Email"/>
<EditText
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Password"
android:layout_below="@id/email"/>

Pengenalan User Interface (UI) | 67


<EditText
android:id="@+id/namadepan"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_below="@id/password"
android:layout_alignParentLeft="true"

android:layout_toLeftOf="@id/namabelakang"
android:hint="Nama Depan"/>
<EditText
android:id="@+id/namabelakang"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_below="@id/password"
android:layout_alignParentRight="true"
android:hint="Nama Belakang"/>

<Button
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_below="@id/namabelakang"
android:layout_alignParentRight="true"
android:background="#388E3C"
android:textColor="#FFF59D"
android:text="Buat Akun" />

</RelativeLayout>

E. Constraint Layout
Pada dasarnya Constraintlayout itu hamper mirip
dengan Relativelayout karena tataletak komponen
disesuaikan dengan komponen lainnya, seperti
contohnya pada relativelayout dapat meletakan
setiap komponen diatas/bawah ataupun disamping
kompnen lainnya. Akan tetapi jika kamu terbiasa
dengan editor drag&drop ConstrainLayout bisa jadi
pilihan tepat untuk kamu karena Constrainlayout
lebih fleksibel dan mudah digunakan pada Layout
Editor.

68 | Pengenalan User Interface (UI)


Pada ConstrainLayout setiap komponen memiliki
tali pada setiap sisinya, supaya tampilan aplikasi
tersusun dengan rapih setiap komponen harus
terikat pada komponen lainnya. Kamu bisa mengatur
Margin dan posisi suatu komponen dengan tali
tersebut, Pada gambar diatas terdapat contoh Button
yang terikat dengan EditText diatasnya dan memiliki
jarak 84dp.

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


<androidx.constraintlayout.widget.ConstraintLayo
ut
xmlns:android="http://schemas.android.com/apk/re
s/android"

xmlns:app="http://schemas.android.com/apk/res-
auto"

xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"

Pengenalan User Interface (UI) | 69


android:layout_height="match_parent"
tools:context=".MainActivity"
android:padding="10dp">

<EditText
android:id="@+id/email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Email"

app:layout_constraintEnd_toEndOf="parent"

app:layout_constraintStart_toStartOf="parent"

app:layout_constraintTop_toTopOf="parent" />

<EditText
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/email"
android:hint="Password"

app:layout_constraintEnd_toEndOf="parent"

app:layout_constraintStart_toStartOf="parent"

app:layout_constraintTop_toBottomOf="@+id/email"
/>

<EditText
android:id="@+id/namadepan"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_below="@id/password"
android:layout_alignParentLeft="true"
android:hint="Nama Depan"

app:layout_constraintEnd_toStartOf="@+id/namabel
akang"

app:layout_constraintStart_toStartOf="parent"

app:layout_constraintTop_toBottomOf="@+id/passwo
rd" />

70 | Pengenalan User Interface (UI)


<EditText
android:id="@+id/namabelakang"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_below="@id/password"
android:layout_alignParentRight="true"
android:hint="Nama Belakang"

app:layout_constraintEnd_toEndOf="parent"

app:layout_constraintTop_toBottomOf="@+id/passwo
rd" />

<Button
android:id="@+id/button"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_below="@id/namabelakang"
android:layout_alignParentRight="true"
android:layout_marginTop="84dp"
android:background="#388E3C"
android:text="Buat Akun"
android:textColor="#FFF59D"

app:layout_constraintEnd_toEndOf="parent"

app:layout_constraintTop_toBottomOf="@+id/namabe
lakang" />

</androidx.constraintlayout.widget.ConstraintLay
out>

F. Absolute Layout
Berbeda dengan Layout lainnya dimana mereka
memiliki orientasi terstruktur dan terkait dengan
komponen lainnya, Absolutelayout hadir ketika
kamu ingin menentukan secara tepat (koordinat
X/Y) sebuah komponen yang akan kamu gunakan
dalam sebuah aplikasi.

Pengenalan User Interface (UI) | 71


Pada sebuah layout sebaiknya tidak memberikan
banyak komponen dengan Absolute, karena kita
ketahui banyak sekali tipe device dengan pixel yang
berbeda-beda. Sehingga ketika kamu mendesain
sebuah layout dengan device A akan mungkin
hasilnya berbeda ketika kamu menjalankan aplikasi
pada device B yang berbeda tipe device nya.

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


<AbsoluteLayout
xmlns:android="http://schemas.android.com/apk/re
s/android"

xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:padding="10dp">

<Button
android:id="@+id/button"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginTop="84dp"
android:layout_x="125dp"
android:layout_y="315dp"
android:background="#388E3C"
android:text="Button"
android:textColor="#FFF59D" />

</AbsoluteLayout>

72 | Pengenalan User Interface (UI)


G. Mengenal View

H. Basic View

I. List View

Pengenalan User Interface (UI) | 73


BAB 6
Intent

Asd

A. Program Intent Sederhana

B. Program Intent disertai Menu Pilihan

74 | Intent
BAB 7
AsyncTask

Asd

A. Bentuk Penulisan subClass


AsyncTask

B. Parameter dalam AsyncTask

C. Metode-Metode dalam AsyncTask

D. Cara Mengupgrade Versi Android

AsyncTask | 75
BAB 8
Membuat Project Android
dengan Monolithic
Architecture

Setelah sekian panjang kita membahas tentang


pengertian Arsitektur Monolithic, SOA dan
Microservice rasanya tidak lengkap jika kita tidak
membuat sebuah project menggunakan tiga
arsitektur tersebut.

Sebelum kita mulai membuat Project, aku ingin


kamu membayangkan jika kita akan benar-benar
membuat sebuah Project sungguhan dimana kita
akan membuat sebuah aplikasi dimana hanya kamu
seorang sebagai developernya. Aplikasi tersebut
diberi nama “CATANG”, dimana aplikasi tersebut
memiliki fungsi menyimpan catatan hutang dan
akan dibuat sebagai aplikasi android.

Langkah pertama yang harus kamu lakukan


adalah menentukan Arsitektur apa yang akan kamu
gunakan dalam pembuatan aplikasi?

Karena kamu telah membabaca sedikit ulasan


untuk setiap arsitektur pada Bab I, maka kamu bisa
menentukan arsitektur yang tepat dalam proses
pembuatan aplikasi tersebut yaitu Arsitektur
Monolithic. Setelah kamu mengetahui arsitektur

76 | Membuat Project Android dengan Monolithic Architecture


yang cocok maka kamu akan segera melakukan
proses pembuatan Aplikasi tersebut.

A. Perispan Pembuatan Program


Catatan Harian Portable
Pertama, buat sebuah project baru dengan
EmptyActivity pada Android Studio dan beri nama
CATANG dan tunggu sampai proses build selesai.

Membuat Project Android dengan Monolithic Architecture | 77


Kedua, buat folder baru pada folder Java
dengan struktur folder seperti gambar

78 | Membuat Project Android dengan Monolithic Architecture


- adapter, berisi file adapter yang
menghubungkan View dengan data
- data, berisi file DAO untuk akses database
- model, berisi Entity yang diperlukan dalam
pembuatan tabel

Ketiga, buka file gradle dan masukan depedency


berikut agar kita bisa menggunakan Room dan
depedency design agar tampilan apikasi kita lebih
menarik, lalu klik Sync Now untuk menerapkan
depedency pada aplikasi kita

Membuat Project Android dengan Monolithic Architecture | 79


Keempat, Buat file Java Class baru didalam
folder model dan beri nama Hutang.java dan ketikan
kode berikut :

package com.example.catang.model;

import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.PrimaryKey;

import java.io.Serializable;

@Entity(tableName = "tbHutang")
public class Hutang implements Serializable {

@PrimaryKey(autoGenerate = true)
private int hutangId;

@ColumnInfo(name = "nama")
private String nama;

@ColumnInfo(name = "jumlah")
private String jumlah;

@ColumnInfo(name = "keterangan")
private String keterangan;

@ColumnInfo(name = "status")
private int status;

@ColumnInfo(name = "type")
private int type;

public int getHutangId() {


return hutangId;
}

public void setHutangId(int hutangId) {


this.hutangId = hutangId;
}

public String getNama() {


return nama;
}

80 | Membuat Project Android dengan Monolithic Architecture


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

public String getJumlah() {


return jumlah;
}

public void setJumlah(String jumlah) {


this.jumlah = jumlah;
}

public String getKeterangan() {


return keterangan;
}

public void setKeterangan(String keterangan)


{
this.keterangan = keterangan;
}

public int getStatus() {


return status;
}

public void setStatus(int status) {


this.status = status;
}

public int getType() {


return type;
}

public void setType(int type) {


this.type = type;
}
}

Kelima, Buat file Java Class baru didalam folder


data dan beri nama HutangDAO.java (pilih interface
pada kolom kind) kemudian ketikan kode berikut :

package com.example.catang.data;

import androidx.room.Dao;

Membuat Project Android dengan Monolithic Architecture | 81


@Dao
public interface HutangDAO {

Keenam, Buat file Java Class baru didalam


folder data dan beri nama AppDatabase kemudian
ketikan kode berikut :

package com.example.catang.data;

import androidx.room.Database;
import androidx.room.RoomDatabase;

import com.example.catang.model.Hutang;

@Database(entities = {Hutang.class}, version =


1)
public abstract class AppDatabase extends
RoomDatabase {

public abstract HutangDAO hutangDAO();

B. Menambahkan Data Pada Program


Pertama, buka kembali file HutangDAO dan
rubah file tersebut menjadi

package com.example.catang.data;

import androidx.room.Dao;
import androidx.room.Insert;
import androidx.room.OnConflictStrategy;

import com.example.catang.model.Hutang;

@Dao
public interface HutangDAO {

82 | Membuat Project Android dengan Monolithic Architecture


@Insert(onConflict =
OnConflictStrategy.REPLACE)
long insertHutang(Hutang hutang);

Kedua, buat Activity baru dengan nama


TambahHutang

Kedua, Ketika code berikut kedalam


activity_tambah_hutang.xml untuk membuat
tampilan UI insert data

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


<LinearLayout
xmlns:android="http://schemas.android.com/apk/re
s/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:orientation="vertical"

Membuat Project Android dengan Monolithic Architecture | 83


android:layout_margin="6dp"
tools:context=".TambahHutang">

<RadioGroup
android:id="@+id/jenis_hutang"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="6dp"
android:layout_marginTop="6dp"
android:orientation="horizontal">

<RadioButton
android:id="@+id/memberiHutang"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="Memberi Hutang" />

<RadioButton
android:id="@+id/menerimaHutang"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:text="Menerima Hutang" />

</RadioGroup>

<com.google.android.material.textfield.TextInput
Layout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="6dp"

style="@style/Widget.MaterialComponents.TextInpu
tLayout.OutlinedBox">

<com.google.android.material.textfield.TextInput
EditText
android:id="@+id/nama"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="NAMA" />

84 | Membuat Project Android dengan Monolithic Architecture


</com.google.android.material.textfield.TextInpu
tLayout>

<com.google.android.material.textfield.TextInput
Layout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="6dp"

style="@style/Widget.MaterialComponents.TextInpu
tLayout.OutlinedBox">

<com.google.android.material.textfield.TextInput
EditText
android:id="@+id/jumlah"
android:inputType="number"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Jumlah Pinjaman" />

</com.google.android.material.textfield.TextInpu
tLayout>

<com.google.android.material.textfield.TextInput
Layout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="6dp"

style="@style/Widget.MaterialComponents.TextInpu
tLayout.OutlinedBox">

<com.google.android.material.textfield.TextInput
EditText
android:id="@+id/keterangan"
android:lines="5"
android:maxLines="5"
android:gravity="top|left"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Keterangan" />

Membuat Project Android dengan Monolithic Architecture | 85


</com.google.android.material.textfield.TextInpu
tLayout>

<Button
android:id="@+id/btnSave"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Simpan"
android:background="@color/colorPrimary"
android:textColor="#FFFFFF"/>
</LinearLayout>

Ketiga, buka File TambahHutang.java dan


ketikan code berikut:
package com.example.catang;

import androidx.appcompat.app.AppCompatActivity;
import androidx.room.Room;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;

import com.example.catang.data.AppDatabase;
import com.example.catang.model.Hutang;
import
com.google.android.material.textfield.TextInputE
ditText;

public class TambahHutang extends


AppCompatActivity {
private TextInputEditText nama, jumlah,
keterangan;
private RadioGroup radioGroup;
private RadioButton memberiHutang,
menerimaHutang;
private Button btnSave;
private int typeHutang;
private AppDatabase appDatabase;

86 | Membuat Project Android dengan Monolithic Architecture


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

setContentView(R.layout.activity_tambah_hutang);

getSupportActionBar().setTitle("Tambah
Hutang");

nama = findViewById(R.id.nama);
jumlah = findViewById(R.id.jumlah);
keterangan =
findViewById(R.id.keterangan);
radioGroup =
findViewById(R.id.jenis_hutang);
menerimaHutang =
findViewById(R.id.menerimaHutang);
memberiHutang =
findViewById(R.id.memberiHutang);
btnSave = findViewById(R.id.btnSave);

appDatabase = Room.databaseBuilder(
getApplicationContext(),
AppDatabase.class,
"dbHutang").build();

btnSave.setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View v) {

if (menerimaHutang.isChecked()){
typeHutang = 1;
} else if
(memberiHutang.isChecked()){
typeHutang = 2;
}

if
(nama.getText().toString().isEmpty() ||
jumlah.getText().toString().isEmpty() ||
keterangan.getText().toString().isEmpty()){

Membuat Project Android dengan Monolithic Architecture | 87


Toast.makeText(TambahHutang.this, "Semua Field
Harus diisi", Toast.LENGTH_SHORT).show();
} else {

Toast.makeText(TambahHutang.this, "Berhasil
Tambah Data ", Toast.LENGTH_SHORT).show();

Hutang hutang = new


Hutang();

hutang.setNama(nama.getText().toString());

hutang.setJumlah(jumlah.getText().toString());

hutang.setKeterangan(keterangan.getText().toStri
ng());
hutang.setStatus(1);
hutang.setType(typeHutang);

insertHutang(hutang);

}
}
});

@SuppressLint("StaticFieldLeak")
private void insertHutang(final Hutang
hutang){
new AsyncTask<Void, Void, Long>(){

@Override
protected Long
doInBackground(Void... voids) {
return
appDatabase.hutangDAO().insertHutang(hutang);
}

@Override
protected void onPostExecute(Long
status) {

88 | Membuat Project Android dengan Monolithic Architecture


//Menandakan bahwa data berhasil
disimpan
//
Toast.makeText(TambahHutang.this, "Status Row
"+status, Toast.LENGTH_SHORT).show();
startActivity(new
Intent(TambahHutang.this, MainActivity.class));
finish();
}
}.execute();
}

Pada tahap ini sudah bisa melakukan


penambahan data, namun ketika kamu Run dan
build maka kamu tidak bisa akses activity tersebut
karena belum ada intent yang akses kedatabase
tersebut. Oleh sebab itu mari kita buat intent yang
mengarahkan ke-Acivity TambahHutang

Keempat, Buka file layout activity_main.xml


dan tambahkan kode berikut

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


<androidx.constraintlayout.widget.ConstraintLayo
ut
xmlns:android="http://schemas.android.com/apk/re
s/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">

<com.google.android.material.floatingactionbutto
n.FloatingActionButton
android:id="@+id/fabTambah"

Membuat Project Android dengan Monolithic Architecture | 89


android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|bottom"
android:layout_margin="15dp"

android:backgroundTint="@color/colorPrimary"
app:borderWidth="0dp"
app:elevation="6dp"
app:fabSize="normal"

app:layout_constraintBottom_toBottomOf="parent"

app:layout_constraintEnd_toEndOf="parent"
android:src="@drawable/ic_add"
/>

</androidx.constraintlayout.widget.ConstraintLay
out>

Kamu akan mengalami error pada src di


widget FAB, oleh karen itu kita harus menambahkan
drawable baru dengan cara klik kanan pada folder
drawable  New  Vector Asset

90 | Membuat Project Android dengan Monolithic Architecture


Setelah itu akan muncul windows baru
kemudian kamu klik tombol clip Art  Masukan
keyword “add”  pilih icon yang kamu inginkan 
klik tombol OK

Pada kolom name ubah menjadi ic_add dan


ubah nilai color nya menjadi FFFFFF kemudian klik
tombol Next, setelah itu klik Tombol Finish maka
error pada FAB hilang.

Membuat Project Android dengan Monolithic Architecture | 91


Kelima, Buka file MainActivity.java kemudian
ketikan code berikut
package com.example.catang;

import androidx.appcompat.app.AppCompatActivity;

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

import com.example.catang.R;
import
com.google.android.material.floatingactionbutton
.FloatingActionButton;

public class MainActivity extends


AppCompatActivity {

FloatingActionButton fabTambah;

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

fabTambah =
findViewById(R.id.fabTambah);
fabTambah.setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new
Intent(MainActivity.this, TambahHutang.class));
}
});
}
}

Keenam, Coba jalankan Aplikasi tersebut


pada device kamu. Berikut demo aplikasi yang telah
dibuat

92 | Membuat Project Android dengan Monolithic Architecture


C. Menampilkan Data Program
Pertama, buka kembali file HutangDAO.java dan
ubah isi file tersebut menjadi :

package com.example.catang.data;

import androidx.room.Dao;
import androidx.room.Insert;
import androidx.room.OnConflictStrategy;
import androidx.room.Query;

import com.example.catang.model.Hutang;

@Dao
public interface HutangDAO {

@Insert(onConflict =
OnConflictStrategy.REPLACE)
long insertHutang(Hutang hutang);

@Query("SELECT * From tbHutang")


Hutang[] readDataHutang();

Kedua, buka fille activity_main.xml dan


tambahkan recyclerView pada xml tersebut seperti :

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


<androidx.constraintlayout.widget.ConstraintLayo
ut
xmlns:android="http://schemas.android.com/apk/re
s/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">

Membuat Project Android dengan Monolithic Architecture | 93


<androidx.recyclerview.widget.RecyclerView
android:id="@+id/dataItem"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="6dp"

app:layout_constraintBottom_toBottomOf="parent"

app:layout_constraintEnd_toEndOf="parent"

app:layout_constraintStart_toStartOf="parent"

app:layout_constraintTop_toTopOf="parent" />

<com.google.android.material.floatingactionbutto
n.FloatingActionButton
android:id="@+id/fabTambah"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|bottom"
android:layout_margin="15dp"

android:backgroundTint="@color/colorPrimary"
app:borderWidth="0dp"
app:elevation="6dp"
app:fabSize="normal"

app:layout_constraintBottom_toBottomOf="parent"

app:layout_constraintEnd_toEndOf="parent"
android:src="@drawable/ic_add"
/>

</androidx.constraintlayout.widget.ConstraintLay
out>

Ketiga, buat layout baru dan beri nama


item_hutang.xml lalu ketikan kode berikut :

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


<androidx.cardview.widget.CardView
xmlns:android="http://schemas.android.com/apk/re

94 | Membuat Project Android dengan Monolithic Architecture


s/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"

xmlns:app="http://schemas.android.com/apk/res-
auto"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="4dp"
android:layout_marginBottom="4dp"
app:cardCornerRadius="2dp"
app:cardElevation="1dp"
android:clickable="true"
android:focusable="true"

android:foreground="?attr/selectableItemBackgrou
nd"
app:cardBackgroundColor="@color/colorAccent"
android:id="@+id/card_item">

<LinearLayout
android:id="@+id/line"
android:layout_width="10dp"
android:layout_height="match_parent"
android:orientation="vertical"

android:background="#49000000"></LinearLayout>

<RelativeLayout
android:padding="10dp"
android:layout_marginStart="10dp"
android:layout_marginLeft="10dp"
android:layout_width="match_parent"
android:layout_height="70dp">

<TextView
android:id="@+id/nama"
android:text="Nama"
android:layout_width="match_parent"
android:textSize="18sp"

android:textColor="@android:color/white"
android:layout_height="wrap_content"
/>

<TextView

Membuat Project Android dengan Monolithic Architecture | 95


android:id="@+id/jumlah"
android:text="Rp.10000"
android:layout_below="@id/nama"
android:layout_width="match_parent"
android:layout_height="wrap_content"

android:textColor="@android:color/white"
android:layout_marginTop="5dp"/>

<androidx.constraintlayout.widget.ConstraintLayo
ut
android:layout_width="match_parent"

android:layout_height="match_parent">

<ImageView
android:id="@+id/imgStatus"
android:layout_width="24dp"
android:layout_height="24dp"

android:layout_alignParentEnd="true"

android:layout_alignParentRight="true"
android:src="@drawable/ic_done"

app:layout_constraintBottom_toBottomOf="parent"

app:layout_constraintEnd_toEndOf="parent"

app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLay
out>

</RelativeLayout>

</androidx.cardview.widget.CardView>

Kamu akan menemukan Error pada drawable


ImageView, kamu harus menambahkan icon done

96 | Membuat Project Android dengan Monolithic Architecture


seperti sebelumnya dan jika berhasil akan tampil
pada Preview Android Studio seperti gambar berikut :

Keempat, buat sebuah adapter baru untuk


menampilkan data dengan nama HutangAdapter dan
simpan didalam folder adapter

package com.example.catatanhutang;

Membuat Project Android dengan Monolithic Architecture | 97


import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
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.appcompat.app.AlertDialog;
import androidx.cardview.widget.CardView;
import
androidx.recyclerview.widget.RecyclerView;
import androidx.room.Room;

import com.example.catang.R;
import com.example.catang.data.AppDatabase;
import com.example.catang.model.Hutang;

import java.util.ArrayList;

public class HutangAdapter extends


RecyclerView.Adapter<HutangAdapter.ViewHolder> {

private ArrayList<Hutang> daftarHutang;


private AppDatabase appDatabase;
private Context context;

public HutangAdapter(ArrayList<Hutang>
daftarHutang, Context context){

this.daftarHutang = daftarHutang;
this.context = context;
appDatabase = Room.databaseBuilder(
context.getApplicationContext(),
AppDatabase.class,

"dbHutang").allowMainThreadQueries().build();

public class ViewHolder extends

98 | Membuat Project Android dengan Monolithic Architecture


RecyclerView.ViewHolder{
private TextView etNama, etJumlah;
CardView card_item;
ImageView imgStatus;

ViewHolder(View itemView){
super(itemView);

etNama =
itemView.findViewById(R.id.nama);
etJumlah =
itemView.findViewById(R.id.jumlah);
card_item =
itemView.findViewById(R.id.card_item);
imgStatus =
itemView.findViewById(R.id.imgStatus);

}
}

@NonNull
@Override
public ViewHolder
onCreateViewHolder(@NonNull ViewGroup parent,
int viewType) {
//Inisialisasi Layout Item untuk
RecyclerView
View v =
LayoutInflater.from(parent.getContext()).inflate
(R.layout.item_hutang, parent, false);
return new ViewHolder(v);
}

@Override
public void onBindViewHolder(@NonNull
ViewHolder holder, final int position) {

//Deklarasi Variable untuk mendapatkan


data dari Database melalui Array
String getNama =
daftarHutang.get(position).getNama();
String getJumlah =
daftarHutang.get(position).getJumlah();
int getType =
daftarHutang.get(position).getType();

Membuat Project Android dengan Monolithic Architecture | 99


int getStatus =
daftarHutang.get(position).getStatus();

//Menampilkan data berdasarkan posisi


Item dari RecyclerView
holder.etNama.setText(getNama);
holder.etJumlah.setText("Rp.
"+getJumlah);
if (getType == 1){

holder.card_item.setCardBackgroundColor(Color.pa
rseColor("#D81B60"));
} else if (getType == 2){

holder.card_item.setCardBackgroundColor(Color.pa
rseColor("#008577"));
}

if (getStatus == 1 ){

holder.imgStatus.setVisibility(View.INVISIBLE);
} else if (getStatus == 2 ){

holder.imgStatus.setVisibility(View.VISIBLE);
}

@Override
public int getItemCount() {
//Menghitung data / ukuran dari Array
return daftarHutang.size();
}

Kelima, buka MainActivity dan ubah kodenya


menjadi

package com.example.catang;

import

100| Membuat Project Android dengan Monolithic Architecture


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

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

import com.example.catang.R;
import
com.example.catang.data.AppDatabase;
import com.example.catang.model.Hutang;
import
com.google.android.material.floatingactionbutton
.FloatingActionButton;

import java.util.ArrayList;
import java.util.Arrays;

public class MainActivity extends


AppCompatActivity {

FloatingActionButton fabTambah;
private RecyclerView recyclerView;
private RecyclerView.Adapter adapter;
private RecyclerView.LayoutManager
layoutManager;
private AppDatabase appDatabase;
private ArrayList<Hutang> daftarHutang;

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

daftarHutang = new ArrayList<>();

appDatabase =
Room.databaseBuilder(getApplicationContext(),App
Database.class,"dbHutang").allowMainThreadQuerie
s().build();

Membuat Project Android dengan Monolithic Architecture | 101


daftarHutang.addAll(Arrays.asList(appDatabase.hu
tangDAO().readDataHutang()));

recyclerView =
findViewById(R.id.dataItem);
recyclerView.setHasFixedSize(true);

layoutManager = new
LinearLayoutManager(this);

recyclerView.setLayoutManager(layoutManager);

adapter = new
com.example.catatanhutang.HutangAdapter(daftarHu
tang, MainActivity.this);
recyclerView.setAdapter(adapter);

fabTambah =
findViewById(R.id.fabTambah);
fabTambah.setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new
Intent(MainActivity.this, TambahHutang.class));
}
});
}
}

Keenam, jalankan program maka akan tampil


list data yang telah kamu simpan sebelumnya

D. Ubah Data Program


Pada fungsi update diprogram ini tidak untuk
mengubah semua detail data, namun hanya
mengubah data status apakah hutang sudah dibayar
atau belum Berikut caranya:

102| Membuat Project Android dengan Monolithic Architecture


Pertama, buka kembali file HutangDAO.java dan
ubah isi file tersebut menjadi :
package com.example.catang.data;

import androidx.room.Dao;
import androidx.room.Insert;
import androidx.room.OnConflictStrategy;
import androidx.room.Query;
import androidx.room.Update;

import com.example.catang.model.Hutang;

@Dao
public interface HutangDAO {

@Insert(onConflict =
OnConflictStrategy.REPLACE)
long insertHutang(Hutang hutang);

@Query("SELECT * From tbHutang")


Hutang[] readDataHutang();

@Update
int updateHutang(Hutang hutang);

Kedua, Buat Activity baru dengan nama


LunasHutang :

Membuat Project Android dengan Monolithic Architecture | 103


Ketiga, buka file layout activity_lunas_hutang
dan ketikan koder berikut :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/re
s/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:orientation="vertical"
android:layout_margin="6dp"
tools:context=".LunasHutang">

<com.google.android.material.textfield.TextInput
Layout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="6dp"

104| Membuat Project Android dengan Monolithic Architecture


style="@style/Widget.MaterialComponents.TextInpu
tLayout.OutlinedBox">

<com.google.android.material.textfield.TextInput
EditText
android:id="@+id/nama"
android:enabled="false"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="NAMA" />

</com.google.android.material.textfield.TextInpu
tLayout>

<com.google.android.material.textfield.TextInput
Layout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="6dp"

style="@style/Widget.MaterialComponents.TextInpu
tLayout.OutlinedBox">

<com.google.android.material.textfield.TextInput
EditText
android:id="@+id/jumlah"
android:inputType="number"
android:enabled="false"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Jumlah Pinjaman" />

</com.google.android.material.textfield.TextInpu
tLayout>

<com.google.android.material.textfield.TextInput
Layout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="6dp"

Membuat Project Android dengan Monolithic Architecture | 105


style="@style/Widget.MaterialComponents.TextInpu
tLayout.OutlinedBox">

<com.google.android.material.textfield.TextInput
EditText
android:id="@+id/keterangan"
android:lines="5"
android:maxLines="5"
android:enabled="false"
android:gravity="top|left"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Keterangan" />

</com.google.android.material.textfield.TextInpu
tLayout>

<Button
android:id="@+id/btnLunas"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Lunas"
android:background="@color/colorPrimary"
android:textColor="#FFFFFF"/>
</LinearLayout>

Keempat, buka file adapter HutangAdapter dan


ubah isi filenya menjadi :
package com.example.catatanhutang;

import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
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.appcompat.app.AlertDialog;

106| Membuat Project Android dengan Monolithic Architecture


import androidx.cardview.widget.CardView;
import
androidx.recyclerview.widget.RecyclerView;
import androidx.room.Room;

import com.example.catang.R;
import com.example.catang.TambahHutang;
import com.example.catang.data.AppDatabase;
import com.example.catang.model.Hutang;

import java.util.ArrayList;

public class HutangAdapter extends


RecyclerView.Adapter<HutangAdapter.ViewHolder> {

private ArrayList<Hutang> daftarHutang;


private AppDatabase appDatabase;
private Context context;

public HutangAdapter(ArrayList<Hutang>
daftarHutang, Context context){

this.daftarHutang = daftarHutang;
this.context = context;
appDatabase = Room.databaseBuilder(
context.getApplicationContext(),
AppDatabase.class,

"dbHutang").allowMainThreadQueries().build();

public class ViewHolder extends


RecyclerView.ViewHolder{
private TextView etNama, etJumlah;
CardView card_item;
ImageView imgStatus;

ViewHolder(View itemView){
super(itemView);

etNama =
itemView.findViewById(R.id.nama);
etJumlah =
itemView.findViewById(R.id.jumlah);
card_item =

Membuat Project Android dengan Monolithic Architecture | 107


itemView.findViewById(R.id.card_item);
imgStatus =
itemView.findViewById(R.id.imgStatus);

}
}

@NonNull
@Override
public ViewHolder
onCreateViewHolder(@NonNull ViewGroup parent,
int viewType) {
//Inisialisasi Layout Item untuk
RecyclerView
View v =
LayoutInflater.from(parent.getContext()).inflate
(R.layout.item_hutang, parent, false);
return new ViewHolder(v);
}

@Override
public void onBindViewHolder(@NonNull
ViewHolder holder, final int position) {

//Deklarasi Variable untuk mendapatkan


data dari Database melalui Array
String getNama =
daftarHutang.get(position).getNama();
String getJumlah =
daftarHutang.get(position).getJumlah();
int getType =
daftarHutang.get(position).getType();
int getStatus =
daftarHutang.get(position).getStatus();

//Menampilkan data berdasarkan posisi


Item dari RecyclerView
holder.etNama.setText(getNama);
holder.etJumlah.setText("Rp.
"+getJumlah);
if (getType == 1){

holder.card_item.setCardBackgroundColor(Color.pa
rseColor("#D81B60"));
} else if (getType == 2){

108| Membuat Project Android dengan Monolithic Architecture


holder.card_item.setCardBackgroundColor(Color.pa
rseColor("#008577"));
}

if (getStatus == 1 ){

holder.imgStatus.setVisibility(View.INVISIBLE);
} else if (getStatus == 2 ){

holder.imgStatus.setVisibility(View.VISIBLE);
}

holder.itemView.setOnLongClickListener(new
View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
CharSequence[] menuPilihan =
{"Edit", "Delete"};
AlertDialog.Builder dialog = new
AlertDialog.Builder(v.getContext())
.setTitle("Pilih Aksi")
.setItems(menuPilihan,
new DialogInterface.OnClickListener() {
@Override
public void
onClick(DialogInterface dialog, int which) {
switch (which){
case 0:
/*
Menjalankan
Perintah Edit Data
Menggunakan
Bundle untuk mengambil data yang akan Diedit
*/

onEditData(position, context);
break;

case 1:
/*
Menjalankan
Perintah Delete Data
Akan

Membuat Project Android dengan Monolithic Architecture | 109


dibahas pada Tutorial selanjutnya
*/

onDeleteData(position);
break;
}
}
});
dialog.create();
dialog.show();
return true;
}
});

@Override
public int getItemCount() {
//Menghitung data / ukuran dari Array
return daftarHutang.size();
}

private void onEditData(int position,


Context context){
context.startActivity(new
Intent(context,
TambahHutang.class).putExtra("data",
daftarHutang.get(position)));
((Activity)context).finish();
}

private void onDeleteData(int position){

Toast.makeText(context, "Fungsi Hapus


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

Kelima, buka file LunasHutang dan ubah isi nya


menjadi

110 | Membuat Project Android dengan Monolithic Architecture


package com.example.catang;

import androidx.appcompat.app.AppCompatActivity;
import androidx.room.Room;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.example.catang.data.AppDatabase;
import com.example.catang.model.Hutang;
import
com.google.android.material.textfield.TextInputE
ditText;

public class LunasHutang extends


AppCompatActivity {

private TextInputEditText nama, jumlah,


keterangan;
private AppDatabase appDatabase;
private Button btnLunas;
private Hutang hutang;
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.activity_lunas_hutang);

nama = findViewById(R.id.nama);
jumlah = findViewById(R.id.jumlah);
keterangan =
findViewById(R.id.keterangan);
btnLunas = findViewById(R.id.btnLunas);

appDatabase =
Room.databaseBuilder(getApplicationContext(),App
Database.class,"dbHutang").allowMainThreadQuerie
s().build();

getDataHutang();

Membuat Project Android dengan Monolithic Architecture | 111


btnLunas.setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View v) {
hutang.setStatus(2);
updateDataHutang(hutang);
}
});

private void getDataHutang() {

hutang =
(Hutang)getIntent().getSerializableExtra("data")
;

nama.setText(hutang.getNama());
jumlah.setText(hutang.getJumlah());

keterangan.setText(hutang.getKeterangan());

if (hutang.getType() == 1){

getSupportActionBar().setTitle("Menerima
Hutang");
} else if (hutang.getType() == 2){

getSupportActionBar().setTitle("Memberi
Hutang");
}

@SuppressLint("StaticFieldLeak")
private void updateDataHutang(final Hutang
hutang){
new AsyncTask<Void, Void, Integer>(){
@Override
protected Integer
doInBackground(Void... voids) {
//Menjalankan proses insert data
return

112 | Membuat Project Android dengan Monolithic Architecture


appDatabase.hutangDAO().updateHutang(hutang);
}
@Override
protected void onPostExecute(Integer
status) {
//Menandakan bahwa data berhasil
disimpan
Toast.makeText(LunasHutang.this,
"Data Berhasil Diubah",
Toast.LENGTH_SHORT).show();
startActivity(new
Intent(LunasHutang.this, MainActivity.class));
finish();
}

}.execute();
}

@Override
public void onBackPressed() {
super.onBackPressed();
startActivity(new
Intent(LunasHutang.this, MainActivity.class));
finish();
}
}

Keenam, Jalankan Aplikasi

E. Hapus Data Program


Pertama, buka kembali file HutangDAO.java dan
ubah isi file tersebut menjadi :

package com.example.catang.data;

import androidx.room.Dao;
import androidx.room.Delete;
import androidx.room.Insert;

Membuat Project Android dengan Monolithic Architecture | 113


import androidx.room.OnConflictStrategy;
import androidx.room.Query;
import androidx.room.Update;

import com.example.catang.model.Hutang;

@Dao
public interface HutangDAO {

@Insert(onConflict =
OnConflictStrategy.REPLACE)
long insertHutang(Hutang hutang);

@Query("SELECT * From tbHutang")


Hutang[] readDataHutang();

@Update
int updateHutang(Hutang hutang);

@Delete
void deleteHutang(Hutang hutang);

Kedua, buka kembali file adapter HutangAdapter


dan ubah code pada fungsi onDeleteData menjadi

private void onDeleteData(int position){

appDatabase.hutangDAO().deleteHutang(daftarHutan
g.get(position));
daftarHutang.remove(position);
notifyItemRemoved(position);
notifyItemRangeChanged(position,
daftarHutang.size());
Toast.makeText(context, "Data Berhasil
Dihapus", Toast.LENGTH_SHORT).show();
}

Ketiga, Jalankan Aplikasi

114| Membuat Project Android dengan Monolithic Architecture


F. Detail Data Program
Pertama, buka kembali file HutangDAO.java dan
ubah isi file tersebut menjadi :
package com.example.catang.data;

import androidx.room.Dao;
import androidx.room.Delete;
import androidx.room.Insert;
import androidx.room.OnConflictStrategy;
import androidx.room.Query;
import androidx.room.Update;

import com.example.catang.model.Hutang;

@Dao
public interface HutangDAO {

@Insert(onConflict =
OnConflictStrategy.REPLACE)
long insertHutang(Hutang hutang);

@Query("SELECT * From tbHutang")


Hutang[] readDataHutang();

@Update
int updateHutang(Hutang hutang);

@Delete
void deleteHutang(Hutang hutang);

@Query("SELECT * From tbHutang Where


hutangId = :hutangId LIMIT 1")
Hutang selectDetailHutang(int hutangId);

Kedua, buat activity baru dengan nama


DetailHutang

Membuat Project Android dengan Monolithic Architecture | 115


Ketiga, Buka file layout
activity_detail_hutang dan ketikan kode berikut :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/re
s/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:orientation="vertical"
android:layout_margin="6dp"
tools:context=".DetailHutang">

<com.google.android.material.textfield.TextInput
Layout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="6dp"

style="@style/Widget.MaterialComponents.TextInpu

116| Membuat Project Android dengan Monolithic Architecture


tLayout.OutlinedBox">

<com.google.android.material.textfield.TextInput
EditText
android:id="@+id/nama"
android:enabled="false"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="NAMA" />

</com.google.android.material.textfield.TextInpu
tLayout>

<com.google.android.material.textfield.TextInput
Layout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="6dp"

style="@style/Widget.MaterialComponents.TextInpu
tLayout.OutlinedBox">

<com.google.android.material.textfield.TextInput
EditText
android:id="@+id/jumlah"
android:inputType="number"
android:enabled="false"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Jumlah Pinjaman" />

</com.google.android.material.textfield.TextInpu
tLayout>

<com.google.android.material.textfield.TextInput
Layout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="6dp"

style="@style/Widget.MaterialComponents.TextInpu
tLayout.OutlinedBox">

Membuat Project Android dengan Monolithic Architecture | 117


<com.google.android.material.textfield.TextInput
EditText
android:id="@+id/keterangan"
android:lines="5"
android:maxLines="5"
android:enabled="false"
android:gravity="top|left"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Keterangan" />

</com.google.android.material.textfield.TextInpu
tLayout>

<com.google.android.material.textfield.TextInput
Layout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="6dp"

style="@style/Widget.MaterialComponents.TextInpu
tLayout.OutlinedBox">

<com.google.android.material.textfield.TextInput
EditText
android:id="@+id/status"
android:enabled="false"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Status" />

</com.google.android.material.textfield.TextInpu
tLayout>

</LinearLayout>

Keempat, Buka file adapter dan tambahkan


fungsi onClicklistener didalam fungsi
onBindViewHolder
holder.itemView.setOnClickListener(new
View.OnClickListener() {

118 | Membuat Project Android dengan Monolithic Architecture


@Override
public void onClick(View v) {
Hutang hutang =
appDatabase.hutangDAO().selectDetailHutang(dafta
rHutang.get(position).getHutangId());
context.startActivity(new
Intent(context,
DetailHutang.class).putExtra("detail", hutang));
}
});

Kelima, buka file activity DetailHutang dan


ketikan kode berikut

package com.example.catang;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import com.example.catang.model.Hutang;
import
com.google.android.material.textfield.TextInputE
ditText;

public class DetailHutang extends


AppCompatActivity {

private TextInputEditText nama, jumlah,


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

setContentView(R.layout.activity_detail_hutang);

nama = findViewById(R.id.nama);
jumlah = findViewById(R.id.jumlah);
keterangan =
findViewById(R.id.keterangan);
status = findViewById(R.id.status);

getDetailData();
}

Membuat Project Android dengan Monolithic Architecture | 119


private void getDetailData() {
Hutang hutang =
(Hutang)getIntent().getSerializableExtra("detail
");
if (hutang != null){
nama.setText(hutang.getNama());
jumlah.setText(hutang.getJumlah());

keterangan.setText(hutang.getKeterangan());

if (hutang.getStatus() == 1){
status.setText("Belum Lunas");
} else if (hutang.getStatus() == 2){
status.setText("Lunas");
}
}
}
}

Keenam, Jalankan Aplikasi

G. Cek ricek

120| Membuat Project Android dengan Monolithic Architecture


BAB 9
Membuat Project Android
dengan Service Oriented
Architecture

A. Pembuatan Web Service

B. Operasi CRUD dengan XML

a. Dari Sisi Server (PHP)

b. Dari Sisi Client (Android)

C. Operasi CRUD dengan JSON

a. Dari Sisi Server (PHP)

b. Dari Sisi Client (Android)

Membuat Project Android dengan Service Oriented Architecture | 121


BAB 10
Membuat Project Android
dengan Microservices
Architecture

Bab 10. Membuat Project Android dengan Arsitektur


Microservices

A. Pembuatan Web Service

122| Membuat Project Android dengan Microservices Architecture


REFERENSI

Gunawan, R., & Rahmatulloh, A. (2018). Implementasi Web


Service pada Sistem Host-To-Host Pembayaran Biaya
Akademik. Setrum: Sistem Kendali-Tenaga-Elektronika-
Telekomunikasi-Komputer, 7(2), 320–328.
https://doi.org/10.36055/setrum.v7i2.4100
Jones, M., Bradley, J., & Sakimura, N. (2015). JSON Web Token
(JWT). Retrieved from https://tools.ietf.org/html/rfc7519
Jwt.io. (2017). JSON Web Tokens - jwt.io.
Rahmatulloh, A., Gunawan, R., & Nursuwars, F. M. S. (2019).
Performance comparison of signed algorithms on JSON Web
Token. IOP Conference Series: Materials Science and Engineering,
550, 012023. https://doi.org/10.1088/1757-
899X/550/1/012023
Rahmatulloh, A., & Husen. (2017). Sistem Informasi Manajemen
Anggaran (Simangga) Perguruan Tinggi Berbasis Web (Studi
Kasus : Universitas Siliwangi). Jurnal Edukasi Dan Penelitian
Informatika (JEPIN), 3(2), 89.
https://doi.org/10.26418/jp.v3i2.22512
Rahmatulloh, A., & MSN, F. (2017). Implementasi Load Balancing
Web Server menggunakan Haproxy dan Sinkronisasi File
pada Sistem Informasi Akademik Universitas Siliwangi. Jurnal
Nasional Teknologi Dan Sistem Informasi, 3(2), 241–248.
https://doi.org/10.25077/TEKNOSI.v3i2.2017.241-248
Rahmatulloh, A., Sulastri, H., & Nugroho, R. (2018). Keamanan
RESTful Web Service Menggunakan JSON Web Token
(JWT) HMAC SHA-512. Jurnal Nasional Teknik Elektro Dan
Teknologi Informasi (JNTETI).
https://doi.org/10.22146/jnteti.v7i2.417
Rizal, R., & Rahmatulloh, A. (2019). Restful Web Service Untuk
Integrasi Sistem Akademik Dan Perpustakaan Universitas
Perjuangan. Jurnal Ilmiah Informatika, 7(01), 54.
https://doi.org/10.33884/jif.v7i01.1004
W3School. (n.d.-a). Introduction to XML. Retrieved from
https://www.w3schools.com/xml/xml_whatis.asp
W3School. (n.d.-b). JSON - Introduction. Retrieved from
https://www.w3schools.com/js/js_json_intro.asp

Membuat Project Android dengan Microservices Architecture | 123

Anda mungkin juga menyukai