PEMROGRAMAN PERANGKAT
BERGERAK I
Java under Android Studio
Kegiatan Praktikum
Mata Kuliah
Praktikum Pemrograman Perangkat Bergerak I
Standar Kompetensi
Mahasiswa mampu membangun sebuah aplikasi sistem informasi berbasis mobile yang terhubung
dengan database
Program Studi
Teknik Informatika
Jumlah Pertemuan
8 kali reguler, 2 kali responsi
Rencana Pertemuan
Pertemuan 1 – Modul 1
Pertemuan 2 – Modul 2
Pertemuan 3 – Modul 3
Pertemuan 4 – Modul 4
Pertemuan 6 – Modul 5
Pertemuan 7 – Modul 6
Pertemuan 8 – Modul 7
Pertemuan 9 – Modul 8
Kata Pengantar
Android adalah sebuah sistem operasi yang berbasis Linux untuk telepon seluler seperti
telepon pintar dan komputer tablet. Android menyediakan platform terbuka bagi para pengembang
untuk menciptakan aplikasi mereka sendiri untuk digunakan oleh bermacam peranti bergerak.
Pada modul ini penyusun mengajak praktikan memasuki dunia pemrograman perangkat
bergerak berbasis android dengan menggunakan Java dan XML sebagai bahasa pemrogramannya,
dan menggunakan Android Studio sebagai lingkungan pemrograman yang kaya akan fitur
pertolongan instan. Diharapkan setelah mendapatkan materi ini, mahasiswa mampu membuat
aplikasi yang dapat digunakan untuk menyelesaikan suatu kasus sederhana berbasis perangkat
bergerak.
Namun, kami menyadari bahwa modul ini belumlah sempurna. Tinjauan dan saran yang
bersifat membangun tetaplah sangat diharapkan demi peningkatan kesempurnaan modul praktikum
ini.
Penyusun
4
Daftar Isi
Kegiatan Praktikum ii
Mata Kuliah ii
Standar Kompetensi ii
Program Studi ii
Jumlah Pertemuan ii
Rencana Pertemuan ii
Daftar Isi iv
Tujuan 1
Persiapan 1
Materi Pokok 1
Proses 2
Aktivitas 2
Latihan 7
Penutup 7
Tugas 7
WIDGET 8
Tujuan 8
Persiapan 8
Materi Pokok 8
Proses 9
Aktivitas 9
5
Latihan 21
Penutup 22
Tugas 22
Layout Manager 23
Tujuan 23
Persiapan 23
Materi Pokok 23
Proses 24
Aktivitas 24
Latihan 29
Penutup 29
Tugas 29
Tujuan 30
Persiapan 30
Materi Pokok 30
Proses 31
Aktivitas 31
Latihan 38
Penutup 38
Tugas 38
Menu 39
Tujuan 39
Persiapan 39
Materi Pokok 39
Proses 40
Aktivitas 40
Latihan 44
Penutup 44
6
Tugas 44
Tujuan 45
Persiapan 45
Materi Pokok 45
Proses 46
Aktivitas 46
Latihan 54
Penutup 54
Tugas 54
Database Internal 55
Tujuan 55
Persiapan 55
Materi Pokok 55
Proses 56
Aktivitas 56
Latihan 67
Penutup 67
Tugas 67
Database External 68
Tujuan 68
Persiapan 68
Materi Pokok 68
Proses 69
Aktivitas 69
Latihan 79
Penutup 79
Tugas 79
1
Modul
1
XML BASED LAYOUT
Tujuan
Praktikan diharapkan dapat menggunakan Android Studio untuk membuat program sederhana pada
smartphone/ emulator. Di akhir praktikum ini, praktikan diharapkan:
Persiapan
1. Buku ajar (jika ada)/diktat kuliah/materi dari sumber lain
2. Alat tulis
3. Kertas Buram
4. Lembar jawaban
5. Lembar penilaian (disiapkan oleh asisten)
6. Komputer yang sudah di-install Android Studio & Emulator didalamnya
7. Android Smartphone (Jika tidak menginstall emulator)
Materi Pokok
Praktikum ini mengasumsikan bahwa praktikan telah menginstall Android Studio dalam
laptop/komputernya masing-masing . Praktikan juga diharapkan sudah membaca materi tentang
Android Studio dan pemrograman Java secara mandiri. Agar praktikan dapat mencapai tujuan yang
sudah ditetapkan dalam pertemuan praktikum pertama ini, praktikan harus aktif membaca, bertanya,
dan mencoba mempraktekkan tugas-tugas yang ada dalam modul praktikum ini.
2
Proses
Praktikan wajib mencari referensi tentang pemrograman Java dalam android, kegiatan ini dilakukan
selama 30 menit. Setelah mencari referensi praktikan harus membuat deskripsi singkat tentang
pemrograman Java melalui Android Studio. Langkah selanjutnya adalah mempelajari
struktur/kerangka pemrograman Java dalam android melalui contoh-contoh source code program
Java. Berdasarkan contoh yang dipelajari tersebut praktikan berdiskusi sesuai dengan panduan
aktifitas yang dilakukan selama 20 menit. Setelah diskusi selesai, praktikan melakukan aktifitas
berikutnya secara mandiri. Untuk mengerjakan project (membuat program/coding) secara mandiri,
praktikan dapat menyelesaikannya di dalam laboratorium dengan waktu 30 menit. Berikutnya untuk
sesi latihan, ada soal tentang pengembangan program yang juga harus diselesaikan di laboratorium
juga dalam waktu 50 menit. Terakhir adalah bagian tugas, yaitu project yang dikerjakan dirumah dan
wajib dikumpulkan pada pertemuan berikutnya.
Aktivitas
1. Mahasiswa membaca buku ajar (jika ada)/ diktat kuliah/materi dari sumber lain tentang XML
Based Layout sebagai materi bab pertama. Temukan bagian penting dalam topik XML Based
Layout, kemudian tulis sebagai ringkasan hasil belajar
XML Layout merupakan suatu tampilan tata letak di Android untuk mengatur
penempatan teks, gambar, ataupun komponen lainnya sehingga tampilan pada aplikasi yang
dibuat terlihat rapih dan nyaman untuk dilihat oleh pengguna.
● Langkah yang pertama kita jalankan Android Studio yang sudah terinstal Android SDK.
Setelah AS dijalankan di contoh kita menggunakan versi 4.1.2. Pilih create new project.
3
● Setelah itu, kita akan diarahkan ke halaman untuk memilih template projek yang akan
dibuat, sekarang kita pilih dulu Empty Activity lalu klik Next.
● Selanjutnya, kita akan masuk ke halaman konfigurasi projek kita, disini kita akan
menentukan beberapa hal yaitu,
1. Nama projek
2. Nama paket (package)
3. Lokasi Penyimpanan Projek (Secara default akan disimpan di
(C:\Users\Nama_User\AndroidStudioProjects\)
4. Bahasa Pemrograman Projek (Bisa memilih Java atau Kotlin)
5. Minimum SDK dimana projek ini bisa dijalankan.
● Lalu kita akan berpindah ke halaman awal projek kita, tunggu semua proses yang berjalan
sampai selesai sehingga tampilan projek kita menjadi seperti ini.
Selesai, sekarang kita dapat melanjutkan projek kita untuk membuat aktivitas dari Modul 1.
● Langkah pertama, buka file strings.xml yang terdapat dalam folder res/values/, file ini
berisi nilai-nilai string yang digunakan pada aplikasi yang kita buat. Sesuaikan kodenya
menjadi seperti berikut.
Strings.xml
<resources>
<string name="app_name">Teks Input</string>
<string name="hello_world">Hello World!</string>
<string name="menu_settings">Settings</string>
<string name="nm">Nama:</string>
<string name="btn">OK</string>
</resources>
activity_main.xml
<RelativeLayout
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" >
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/nm" />
<EditText
5
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView2"
android:layout_below="@+id/textView2"
android:layout_marginTop="18dp"
android:ems="10" >
<requestFocus />
</EditText>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/editText1"
android:layout_below="@+id/editText1"
android:layout_marginTop="20dp"
android:text="Button" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/button1"
android:layout_below="@+id/button1"
android:layout_marginTop="48dp"
android:text=""/>
</RelativeLayout>
● Lalu kita akan membuat logika program menggunakan Bahasa Java yang secara otomatis
tersimpan pada src/nama_package/MainActivity.java. Buka file tersebut dan ganti kodenya
menjadi sebagai berikut,
MainActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final EditText EditText1=(EditText)findViewById(R.id.editText1);
Button Button1 = (Button)findViewById(R.id.button1);
final TextView tampil = (TextView)findViewById(R.id.textView1);
Button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
tampil.setText("Nama anda : "+EditText1.getText().toString());
}
});
}
6
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
● Setelah semua sudah selesai disesuaikan, sekarang kita bisa coba jalankan projek kita dan
perhatikan hasilnya.
7
Latihan
PERHATIAN! Program-program yang dihasilkan dari latihan maupun tugas pada setiap
pertemuan mungkin akan digunakan kembali pada pertemuan selanjutnya. Jadi, simpan baik-
baik hasil program yang telah dibuat tersebut.
Kembangkanlah aplikasi dari aktivitas yang telah dibuat dengan menambahkan beberapa hal seperti,
1. Nama Lengkap
2. NRP
3. Jurusan
4. Email
5. Alamat
6. Jenis Kelamin
Penutup
Tugas
Buat form aplikasi untuk menginformasikan CV (curicullum vitae) anda secara lengkap!
Terdapat 4 hal yang harus ada di aplikasi yang akan dibuat, yaitu :
1. Textview untuk Nama Lengkap, Email, Tanggal & Tempat Lahir, Deskripsi
2. EditText untuk semua TextView yang ada
3. Sebuah Button "Tampil" untuk menampilkan data yang sudah di-inputkan.
4. Output berisikan semua data yang user inputkan kedalam EditText.
8
Modul
2
WIDGET
Tujuan
Praktikan diharapkan dapat menggunakan Android Studio untuk membuat program sederhana pada
smartphone/ emulator. Di akhir praktikum ini, praktikan diharapkan:
Persiapan
1. Buku ajar (jika ada)/diktat kuliah/materi dari sumber lain
2. Alat tulis
3. Kertas Buram
4. Lembar jawaban
5. Lembar penilaian (disiapkan oleh asisten)
6. Komputer yang sudah di-install Android Studio & Emulator didalamnya
7. Android Smartphone (Jika tidak menginstall emulator)
Materi Pokok
Praktikum ini mengasumsikan bahwa praktikan telah mempelajari macam-macam widget pada
Android. Praktikum ini mengasumsikan bahwa mahasiswa telah mempelajari berbagai jenis dan
komponen widget dengan benar beserta dengan cara-cara penginputan datan dan pemasangannya.
Praktikan diharapkan mampu menggunakan setiap widget yang dipilih/digunakan dalam program.
Selain itu praktikan diharapkan mampu mengombinasikan berbagai komponen widget yang dapat
digunakan untuk setiap widget tersebut. Agar mahasiswa dapat mencapai tujuan dalam pertemuan
praktikum ketiga ini, mahasiswa harus aktif dalam membuat program dan menyelesaikan setiap
kasus serta mencoba mempraktekkan tugas-tugas dalam praktikum ini.
9
Proses
Praktikan membuat sebuah project atau menyelesaikan sebuah studi kasus yang berhubungan
dengan widget dan bisa melakukan pemasangannya, kemudian mahasiswa dapat menggunakan
komponen-komponen widget untuk melakukan proses penginputan maupun pengeluaran data dan
mempelajari struktur komponen widget dalam program Java Android dengan melihat source code
program Java, kemudian berdiskusi sesuai dengan panduan aktifitas yang ada. Sedangkan waktu
untuk mengerjakan project (membuat program/coding) secara individual harus diselesaikan di
dalam laboratorium dalam waktu 40 menit. Berikutnya untuk sesi latihan, ada soal tentang
pengembangan program yang juga harus diselesaikan di laboratorium dalam waktu 60 menit.
Terakhir adalah bagian tugas, yaitu project yang dikerjakan dirumah dan wajib dikumpulkan pada
pertemuan berikutnya.
Aktivitas
1. Mahasiswa membaca buku ajar (jika ada)/ diktat kuliah/materi dari sumber lain tentang Widget
/ widget view sebagai materi bab kedua. Temukan bagian penting dalam topik Komponen Dasar
Swing ini, kemudian tulis sebagai ringkasan hasil belajar.
2. Widget merupakan tampilan aplikasi mini yang dapat disematkan dalam aplikasi lain (seperti
Layar utama) dan menerima update berkala. Tampilan ini disebut sebagai Widget dalam
antarmuka pengguna, dan Anda dapat memublikasikannya dengan penyedia Widget Aplikasi.
3. Berikut adalah beberapa komponen dari widget pada pemrograman perangkat bergerak:
● TextView
● EditText
● Button
activity_main.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:id="@+id/btnSave"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Save" />
<Button
android:id="@+id/btnOpen"
android:layout_width="wrap_content"
10
android:layout_height="wrap_content"
android:text="Open" />
<ImageButton
android:id="@+id/img1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher_background" />
<EditText
android:id="@+id/txtName"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<CheckBox
android:id="@+id/chkAutoSave"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="AutoSave" />
<CheckBox
android:id="@+id/star"
style="?android:attr/starStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<RadioGroup
android:id="@+id/rdGp1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<RadioButton
android:id="@+id/rdb1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Option1" />
<RadioButton
android:id="@+id/rdb2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Option2" />
</RadioGroup>
<ToggleButton
android:id="@+id/toggle1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
MainActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;
import android.widget.ToggleButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
11
setContentView(R.layout.activity_main);
//button view
Button btnOpen = (Button) findViewById(R.id.btnOpen);
btnOpen.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
DisplayToast("You have click the Open button");
}
});
Button btnSave = (Button) findViewById(R.id.btnSave);
btnSave.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
DisplayToast("You have click the Save Button");
}
});
CheckBox checkBox = (CheckBox)findViewById(R.id.chkAutoSave);
checkBox.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (((CheckBox)v).isChecked())
DisplayToast("Chekbox is checked");
else
DisplayToast("Checkbox is unchecked");
}
});
RadioGroup radioGroup =(RadioGroup)findViewById(R.id.rdGp1);
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group,int checkedId) {
RadioButton rb1 = (RadioButton)findViewById(R.id.rdb1);
if (rb1.isChecked()) {
DisplayToast("Option 1 is checked");
}
else{
DisplayToast("Option 2 is checked");
}
}
});
ToggleButton toggleButton = (ToggleButton) findViewById(R.id.toggle1);
toggleButton.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v) {
if (((ToggleButton)v).isChecked())
DisplayToast("Toggle button is On");
else
DisplayToast("Toggle button is Off");
}
});
}
private void DisplayToast(String msg) {
Toast.makeText(getBaseContext(), msg, Toast.LENGTH_SHORT).show();
}
}
12
● Bila sudah selesai menyesuaikan semua kode, coba jalankan projek dan hasil dari
tampilan utamanya akan menjadi seperti berikut,
● Langkah berikutnya, buatlah sebuah file .xml bernama cell.xml kedalam folder
/res/drawable dengan mengikuti Langkah-langkahnya seperti berikut,
⮚ Klik kanan folder drawable dan pilih New -> Drawable Resources File.
⮚ Setelah itu kita akan diarahkan ke halaman pop-up untuk konfigurasi file
.xml yang akan dibuat. Beri nama cell.xml untuk projek kita dan klik OK.
13
● Jika sudah selesai dibuat, sesuaikan kode didalam cell.xml seperti berikut,
cell.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="88dp"
android:layout_height="122dp"
android:layout_gravity="center_horizontal" />
<TextView
android:id="@+id/keterangan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="keterangan" />
</LinearLayout>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<GridView
android:id="@+id/grid"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:columnWidth="100dip"
android:gravity="center"
android:horizontalSpacing="5dip"
android:numColumns="auto_fit"
android:stretchMode="columnWidth"
android:verticalSpacing="40dip" />
</LinearLayout>
14
MainActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
GridView g = (GridView) findViewById(R.id.grid);
// set adapter gridview
g.setAdapter(new IconAdapter());
// beri action saat click
g.setOnItemClickListener((AdapterView.OnItemClickListener) this);
}
● Setelah selesai membuat activity baru, AS akan membuat 2 file baru yaitu
activity_splash.xml dan Splash.java secara otomatis.
● Buka activity_splash.xml dan sesuaikan kodenya menjadi seperti berikut
activity_splash.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/kk" >
<ProgressBar
android:id="@+id/progressBar1"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="164dp" />
</RelativeLayout>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<EditText
android:id="@+id/editTextTanggal"
17
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginTop="16dp"
android:ems="10"
android:hint="Tanggal" >
<requestFocus />
</EditText>
<EditText
android:id="@+id/editTextJam"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/editTextTanggal"
android:layout_marginTop="17dp"
android:ems="10"
android:hint="Jam" />
</RelativeLayout>
Splash.java
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Window;
MainActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
18
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.TimePicker;
import java.util.Calendar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Calendar c = Calendar.getInstance();
hari = c.get(Calendar.DAY_OF_MONTH);
bulan = c.get(Calendar.MONTH);
tahun = c.get(Calendar.YEAR);
edtTanggal = (EditText) findViewById(R.id.editTextTanggal);
edtJam = (EditText) findViewById(R.id.editTextJam);
edtTanggal.setOnTouchListener(new View.OnTouchListener() {
@SuppressWarnings("deprecation")
@Override
public boolean onTouch(View v, MotionEvent event) {
showDialog(0);
return true;
}
});
edtJam.setOnTouchListener(new View.OnTouchListener() {
@SuppressWarnings("deprecation")
@Override
public boolean onTouch(View v, MotionEvent event) {
showDialog(1);
return true;
}
});
}
● Lalu yang terdapat file penting yang harus disesuaikan juga yaitu
AndroidManifest.xml dimana kita perlu membuat activity Splash untuk berjalan
pertama kali ketika aplikasi dibuka.
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.elreginaldcaesarosan.uas.latihampertemuan2_3">
<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=".Splash">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</manifest>
Membuat ListActivity
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
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"
tools:context=".MainActivity">
<!--List View -->
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="17dp"
android:id="@+id/list_view"
/>
<TextView
android:text="Pilih Mata Kuliah :"
android:textStyle="bold"
android:layout_marginBottom="16dp"
android:layout_alignParentTop="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true"
android:id="@+id/textView"/>
</RelativeLayout>
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
@Override
public void onItemClick(AdapterView<?> parent, View view, int
position, long id) {
Toast.makeText(MainActivity.this, "Memilih : "
+ MataKuliah[position], Toast.LENGTH_LONG).show();
}
});
}
}
Latihan
Buatlah sebuah list bertingkat dengan tingkatan sebagai berikut,
List Genre Buku -> GridView Buku sesuai genre yang dipilih -> Detail Buku
22
Penutup
Tugas
Buatlah sebuah aplikasi untuk menghitung BP (Battle Power) dari Hero yang kalian inputkan dengan
tampilan sebagai berikut!
Petunjuk :
Modul
3
Layout Manager
Tujuan
Praktikan diharapkan dapat menggunakan Android Studio untuk membuat program sederhana pada
smartphone/ emulator. Di akhir praktikum ini, praktikan diharapkan:
Persiapan
1. Buku ajar (jika ada)/diktat kuliah/materi dari sumber lain
2. Alat tulis
3. Kertas Buram
4. Lembar jawaban
5. Lembar penilaian (disiapkan oleh asisten)
6. Komputer yang sudah di-install Android Studio & Emulator didalamnya
7. Android Smartphone (Jika tidak menginstall emulator)
Materi Pokok
Praktikum ini mengasumsikan bahwa mahasiswa telah mempelajari tentang Layout
Manager pada android dengan benar beserta penggunaannya. Agar praktikan dapat mencapai tujuan
dalam pertemuan ini, praktikan harus aktif dalam membuat program dan menyelesaikan setiap kasus
serta mencoba mempraktekkan tugas-tugas dalam praktikum ini.
24
Proses
Praktikan membuat sebuah project atau menyelesaikan sebuah studi kasus dengan memanfaatkan
Layout Manager dan bisa menggunakannya dalam Android Studio, kemudian berdiskusi sesuai
dengan panduan aktivitas yang ada. Sedangkan waktu untuk mengerjakan project (membuat
program/coding) secara individual harus diselesaikan di dalam laboratorium dalam waktu 40 menit.
Berikutnya untuk sesi latihan, ada soal tentang pengembangan program yang juga harus diselesaikan
di laboratorium dalam waktu 60 menit. Terakhir adalah bagian tugas, yaitu project yang dikerjakan
dirumah dan wajib dikumpulkan pada pertemuan berikutnya.
Aktivitas
1. Praktikan membaca buku ajar (jika ada)/diktat kuliah/materi dari sumber lain tentang Layout
Manager pada Android Studio sebagai materi modul ketiga. Temukan bagian penting dalam
topik ini, kemudian tulislah sebagai ringkasan hasil belajar.
2. Praktikan berdiskusi tentang Layout Manager, macam-macamnya dan penggunaannya dalam
Android Studio
4. Berikut merupakan Langkah-langkah membuat sebuah projek android studio dengan layout
manager,
activity_main.xml
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
list_users.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"
25
android:layout_height="wrap_content"
card_view:cardCornerRadius="6dp"
card_view:cardElevation="3dp"
card_view:cardUseCompatPadding="true">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:orientation="vertical"
android:padding="5dp">
</LinearLayout>
</androidx.cardview.widget.CardView>
Users.java
this.alamat = alamat;
}
● Keempat, ubah dan sesuaikan kode pada UserAdapter.java menjadi seperti berikut
UserAdapter.java
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
@Override
public UserViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
View view = layoutInflater.inflate(R.layout.list_users, parent, false);
return new UserViewHolder(view);
}
@Override
public void onBindViewHolder(UserViewHolder holder, int position) {
holder.txtNama.setText(dataList.get(position).getNama());
holder.txtNpm.setText(dataList.get(position).getAlamat());
holder.txtNoHp.setText(dataList.get(position).getJk());
}
@Override
public int getItemCount() {
return (dataList != null) ? dataList.size() : 0;
}
● Kelima, ubah dan sesuaikan juga kode pada MainActivity.java menjadi seperti berikut
27
MainActivity.java
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
import java.util.ArrayList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
addData();
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(adapter);
}
void addData(){
userArrayList = new ArrayList<>();
userArrayList.add(new Users("Dimas Maulana", "Malang", "Pria"));
userArrayList.add(new Users("Elizabeth Yohana", "Jakarta", "Wanita"));
userArrayList.add(new Users("Budi Nugraha", "Batu", "Pria"));
userArrayList.add(new Users("Siti Siswana", "Surabaya", "Wanita"));
}
}
● Setelah semuanya telah selesai disesuaikan, buka file build.gradle level Module yang ada di
dalam folder Gradle Scripts.
Dependency baru :
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'androidx.cardview:cardview:1.0.0'
dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'androidx.cardview:cardview:1.0.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}
Latihan
Modifikasilah aplikasi dari aktivitas yang sudah dibuat dengan menambahkan Toast jika salah satu
list dipilih.
1. Nama
2. Umur
3. Alamat
4. Jenis Kelamin
Penutup
Tugas
Buatlah aplikasi baru dengan menerapkan RecycleView dengan menambahkan beberapa hal sebagai
berikut,
1. Tambahkan sebuah gambar didalam list RecycleView untuk masing" datanya
2. Bila sebuah list dipilih, user akan diarahkan ke halaman/layout detail dari list yang dipilih
30
Modul
4
Alert Dialog & Notification
Tujuan
Praktikan diharapkan dapat menggunakan Android Studio untuk membuat program sederhana pada
smartphone/ emulator. Di akhir praktikum ini, praktikan diharapkan:
Materi Pokok
Praktikum ini mengasumsikan bahwa mahasiswa telah mempelajari kelas Alert Dialog dan
Notification Android dengan benar beserta dengan cara penerapannya. Agar praktikan dapat
mencapai tujuan dalam pertemuan ini, praktikan harus aktif dalam membuat program dan
menyelesaikan setiap kasus serta mencoba mempraktekkan tugas-tugas dalam praktikum ini.
31
Proses
Praktikan membuat sebuah project atau menyelesaikan sebuah studi kasus tentang Alert Dialog dan
Notification kemudian berdiskusi sesuai dengan panduan aktivitas yang ada. Sedangkan waktu
untuk mengerjakan project (membuat program/coding) secara individual harus diselesaikan di
dalam laboratorium dalam waktu 40 menit. Berikutnya untuk sesi latihan, ada soal tentang
pengembangan program yang juga harus diselesaikan di laboratorium dalam waktu 60 menit.
Terakhir adalah bagian tugas, yaitu project yang dikerjakan dirumah dan wajib dikumpulkan pada
pertemuan berikutnya.
Aktivitas
1. Praktikan membaca buku ajar (jika ada)/ diktat kuliah/materi dari sumber lain tentang Alert
Dialog Notification sebagai materi bab keempat. Temukan bagian penting dalam topik ini,
kemudian tulis sebagai ringkasan hasil belajar.
2. Praktikan berdiskusi tentang Alert Dialog Notification serta menerapkannya dalam sebuah
program Java melalui Android Studio.
Alert Dialog
activity_main.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#FFFFFF"
android:orientation="vertical" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="match_parent"
android:layout_height="80dp"
android:src="@drawable/android"/>
<Button
android:id="@+id/btnAlert"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="30dip"
android:padding="10dip"
android:text="Tampilkan Dialog" >
</Button>
<Button
32
android:id="@+id/btnAlertWithTwoBtns"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:padding="10dip"
android:text="Dialog dengan 2 Tombol" >
</Button>
<Button
android:id="@+id/btnAlertWithThreeBtns"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:padding="10dip"
android:text="Dialog dengan 3 Tombol" >
</Button>
<Button
android:id="@+id/btnCustomAlert"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="Custom Dialog" />
<TextView
android:id="@+id/textView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="30dip"
android:gravity="center"
android:text="Pemrograman Perangkat Bergerak"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#58bc07"
android:textSize="17dp"
android:textStyle="bold" />
</LinearLayout>
● Buat sebuah file layout baru bernama detail_info.xml yang nantinya akan
digunakkan untuk menampilkan detail dialog.
detail_info.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:paddingBottom="20dp"
android:paddingTop="20dp"
android:text="Tentang Aplikasi "
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#006699"
android:textStyle="bold" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="3dp"
android:background="#006699"
android:orientation="vertical" >
</LinearLayout>
<LinearLayout
33
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:paddingLeft="20dp"
android:text="Mobile Programming"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingLeft="20dp"
android:text="Android"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textSize="18dp"
android:textStyle="bold" />
</LinearLayout>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:paddingLeft="20dp"
android:text="STIKI"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingLeft="20dp"
android:text="Mencoba Alert Dialog"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textSize="18dp"
android:textStyle="bold" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="2dp"
android:layout_marginTop="30dp"
android:background="#CCFFCC"
android:orientation="vertical" >
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="20dp"
android:gravity="center"
android:orientation="horizontal" >
<Button
android:id="@+id/btn_custom_alert_ok"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="OK"
android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
</LinearLayout>
MainActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.Menu;
import android.view.Window;
import android.widget.Button;
34
import android.view.View;
import android.widget.Toast;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnAlertTwoBtns = (Button) findViewById(R.id.btnAlertWithTwoBtns);
btnCustomAlert = (Button) findViewById(R.id.btnCustomAlert);
btnAlertWithThreeBtns = (Button) findViewById (R.id.btnAlertWithThreeBtns);
btnAlert = (Button) findViewById (R.id.btnAlert);
btnAlertTwoBtns.setOnClickListener(this);
btnCustomAlert.setOnClickListener(this);
btnAlertWithThreeBtns.setOnClickListener(this);
btnAlert.setOnClickListener(this);
}
alertDialog3.setPositiveButton("YES",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(),
"Tombol YES ditekan", Toast.LENGTH_SHORT).show();
}
});
alertDialog3.setNeutralButton("NO",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(),
"Tombol NO ditekan", Toast.LENGTH_SHORT).show();
dialog.cancel();
}
});
alertDialog3.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(),
"Tombol Cancel ditekan", Toast.LENGTH_SHORT).show();
dialog.cancel();
}
});
alertDialog3.show();
break;
case R.id.btnCustomAlert:
final Dialog dialog = new Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.detail_info);
Button dialobButton = (Button) dialog.findViewById(R.id.btn_custom_alert_ok);
dialobButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
break;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
return true;
}
}
● Jalankan projek dan cobalah untuk menekan tombol di setiap menu untuk melihat
dialog apa yang akan dikeluarkan.
36
Notification
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<EditText
android:id="@+id/txtJudul"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Judul"
android:inputType="textPersonName" />
<EditText
android:id="@+id/txtpesan"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Pesan"
android:inputType="textPersonName" />
<Button
android:id="@+id/btnkirim"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Kirim" />
</LinearLayout>
MainActivity.java
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.NotificationCompat;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
// deklarasi tombol
Button btnkirim;
// deklarasi edittext
EditText txtjudul, txtpesan;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// inisialisasi komponen
37
● Jalankan projek dan cobalah untuk mengisikan sesuatu lalu tekan tombol kirim
untuk mengirimkan sebuah notifikasi.
38
Latihan
Ubahlah layout menu 2 menjadi tampilan halaman yang berisi,
1. Foto anda
2. Nama dan NRP anda
3. Serta beri tombol back untuk kembali ke menu utama
Penutup
Tugas
Buatlah sebuah aplikasi yang menampilkan sebuah alert dialog yang berisikan "About" dari aplikasi
tersebut!
Dialog berisikan :
Modul
5
Menu
Tujuan
Praktikan diharapkan dapat menggunakan Android Studio untuk membuat program sederhana pada
smartphone/ emulator. Di akhir praktikum ini, praktikan diharapkan dapat:
Persiapan
Materi Pokok
Praktikum ini mengasumsikan bahwa praktikan telah mempelajari materi tentang Menu
pada android. Agar praktikan dapat mencapai tujuan dalam pertemuan praktikum kelima ini, maka
praktikan harus aktif bertanya dan mencoba mempraktekkan tugas-tugas yang ada dalam praktikum
kelima ini.
40
Proses
Pada bab ini praktikan harus mempelajari bagaimana sebuah Menu digunakan dan bagaimana cara
implementasinya dengan mengerjakan contoh kasus yang mana sangat berhubungan dengan
penggunaan Menu pada aplikasi Android dalam satu project, untuk kasus ini kerjakan dalam waktu
20 menit. Berikan keterangan Anda berupa deskripsi singkat tentang contoh kasus tersebut diatas.
Berikutnya diskusikan kasus Anda dengan teman Anda, kemudian mintalah logika dan saran untuk
menyelesaikan kasus Anda tersebut dengan bahasa program Java. Berdiskusi dan melakukan coding
dilakukan dalam waktu 20 menit. Setelah itu selesaikan contoh kasus pada bagian aktifitas dalam
waktu 20 menit secara mandiri. Lanjutkan praktikum Anda dengan menyelesaikan soal pada bagian
latihan dengan batasan waktu selama 20 menit. Bagian terakhir adalah tugas, yaitu project yang harus
dikerjakan dirumah dan wajib dikumpulkan pada pertemuan berikutnya.
Aktivitas
1. Mahasiswa membaca buku ajar (jika ada)/ diktat kuliah/materi dari sumber lain tentang Menu
(Navigation Drawer) sebagai materi bab kelima. Temukan bagian penting dalam topik Menu
(Navigation Drawer) ini, kemudian tulis sebagai ringkasan hasil belajar.
2. Mahasiswa berdiskusi tentang bagaimana cara membuat dan menggunakan Menu (Navigation
Drawer) didalam sebuah projek android studio. Sebagai bahan diskusi, ikutilah langkah-langkah
di bawah ini:
● Buat projek baru pada Android Studio
● Saat memilih template, jangan pilih empty activity, tetapi pilihlah Navigation Drawer
● Klik finish, dan semua layout dan class .java akan dibentuk secara otomatis.
● Siapkan juga 1 empty activity dan beri nama “Satu”.
● Setelah selesai menyiapkan semuanya, buka class MainActivity.java dan sesuaikan kodenya
menjadi seperti berikut
MainActivity.java
import android.content.Intent;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.view.Menu;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
import com.google.android.material.navigation.NavigationView;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.core.view.GravityCompat;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
41
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action",
Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
DrawerLayout drawer = findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar,
R.string.navigation_drawer_open,
R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
NavigationView navigationView =
(NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
}
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
if (id == R.id.nav_camera) {
Intent intentku = new Intent(MainActivity
.this,Satu.class);
startActivity(intentku);
} else if (id == R.id.nav_gallery) {
} else if (id == R.id.nav_slideshow) {
42
activity_satu.xml
Satu.java
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_satu);
}
}
● Untuk mengganti nama dan icon menu navigation drawer, edit pada activity_main_drawer
yang terdapat pada folder res/menu/ sebagai berikut
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_camera"
android:icon="@drawable/ic_menu_camera"
android:title="Import" />
<item
43
android:id="@+id/nav_gallery"
android:icon="@drawable/ic_menu_gallery"
android:title="Gallery" />
<item
android:id="@+id/nav_slideshow"
android:icon="@drawable/ic_menu_slideshow"
android:title="Slideshow" />
<item
android:id="@+id/nav_manage"
android:icon="@drawable/ic_menu_manage"
android:title="Tools" />
</group>
<item android:title="Communicate">
<menu>
<item
android:id="@+id/nav_share"
android:icon="@drawable/ic_menu_share"
android:title="Share" />
<item
android:id="@+id/nav_send"
android:icon="@drawable/ic_menu_send"
android:title="Send" />
</menu>
</item>
</menu>
Latihan
Lengkapi dan kembangkan aplikasi yang sudah dibuat pada aktivitas dengan menambahkan intent
di setiap menu yang nanti akan mengarahkan user ke layout baru sesuai dengan menu yang dipilih!
Penutup
Tugas
Buatlah sebuah tampilan menu yang menerapkannavigation drawer. Pada tiap menu yang di klik
harus mengarah ke intent baru (seperti pada contoh modul)
Modul
6
Location Based Service
Tujuan
Praktikan diharapkan dapat menggunakan Android Studio untuk membuat program sederhana pada
smartphone/ emulator. Di akhir praktikum ini, praktikan diharapkan dapat:
Persiapan
1. Buku ajar (jika ada)/diktat kuliah/materi dari sumber lain
2. Alat tulis
3. Kertas Buram
4. Lembar jawaban
5. Lembar penilaian (disiapkan oleh asisten)
6. Komputer yang sudah di-install Android Studio & Emulator didalamnya
7. Android Smartphone (Jika tidak menginstall emulator)
Materi Pokok
Praktikum ini mengasumsikan bahwa praktikan telah mempelajari materi tentang Location Based
Service. Agar praktikan dapat mencapai tujuan dalam pertemuan praktikum keenam ini, mahasiswa
harus aktif bertanya dan mencoba mempraktekkan tugas dan latihan dalam praktikum array satu
dimensi ini.
46
Proses
Pada bab ini praktikan harus menerapkan Location Based Service seperti MapBox ke dalam project-
project yang akan dibuat. Pertama bacalah dulu materi tentang MapBox selama kira-kira 10 menit.
Berikan contoh implementasi dari sebuah aplikasi LBS lalu berikutnya berdiskusilah dengan teman
Anda tentang materi yang sudah Anda pelajari tadi, diskusi dilakukan selama 15 menit. Kasus
pertama sebagai latihan dikerjakan dalam waktu 20 menit. Lanjutkan praktikum Anda dengan
menyelesaikan soal pada bagian latihan dengan batasan waktu selama 20 menit. Bagian terakhir
adalah tugas, yaitu project yang harus dikerjakan di rumah dan wajib dikumpulkan pada pertemuan
berikutnya.
Aktivitas
1. Mahasiswa membaca buku ajar (jika ada)/ diktat kuliah/materi dari sumber lain tentang
Location Based Service sebagai materi bab keenam. Temukan bagian penting dalam topik
Location Based Service ini, kemudian tulis sebagai ringkasan hasil belajar.
2. Mahasiswa berdiskusi tentang bagaimana cara membuat program Location Based Service
menggunakan Android Studio. Sebagai bahan diskusi, ikutilah langkah-langkah di bawah ini:
Dependency baru
implementation 'com.google.android.gms:play-services-location:18.0.0'
implementation 'com.google.android.gms:play-services-maps:17.0.0'
Permissions :
● Sekarang buka layout activity_main.xml dan sesuaikan kodenya menjadi seperti ini
activity_main.xml
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="Latitude:"
android:textSize="18sp" />
<TextView
android:id="@+id/latitude_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/latitude"
android:layout_marginLeft="10dp"
android:layout_toRightOf="@+id/latitude"
android:textSize="16sp" />
<TextView
android:id="@+id/longitude"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="Longitude:"
android:layout_marginTop="24dp"
android:textSize="18sp" />
<TextView
android:id="@+id/longitude_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/longitude"
android:layout_marginLeft="10dp"
android:layout_toRightOf="@+id/longitude"
android:textSize="16sp"/>
</RelativeLayout>
● Buka class MainActivity.java dan sesuaikan juga kodenya menjadi seperti ini
MainActivity.java
package com.elreginaldcaesarosan.latihanpertemuan6;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import android.Manifest;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.provider.Settings;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.maps.model.LatLng;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mLatitudeTextView = findViewById((R.id.latitude_textview));
mLongitudeTextView = findViewById((R.id.longitude_textview));
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
mLocationManager = (LocationManager)this
.getSystemService(Context.LOCATION_SERVICE);
checkLocation(); //check whether location service is enable or not in your phone
}
@Override
public void onConnected(Bundle bundle) {
if (ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION) !=
PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_COARSE_LOCATION) !=
PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
startLocationUpdates();
mLocation = LocationServices.FusedLocationApi
.getLastLocation(mGoogleApiClient);
if(mLocation == null){
startLocationUpdates();
}
if (mLocation != null) {
// mLatitudeTextView.setText(String.valueOf(mLocation.getLatitude()));
//mLongitudeTextView.setText(String.valueOf(mLocation.getLongitude()));
} else {
Toast.makeText(this, "Location not Detected",
Toast.LENGTH_SHORT).show();
}
}
@Override
public void onConnectionSuspended(int i) {
Log.i(TAG, "Connection Suspended");
mGoogleApiClient.connect();
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
Log.i(TAG, "Connection failed. Error: "
+ connectionResult.getErrorCode());
}
@Override
protected void onStart() {
super.onStart();
if (mGoogleApiClient != null) {
49
mGoogleApiClient.connect();
}
}
@Override
protected void onStop() {
super.onStop();
if (mGoogleApiClient.isConnected()) {
mGoogleApiClient.disconnect();
}
}
@Override
public void onLocationChanged(Location location) {
String msg = "Updated Location: " +
Double.toString(location.getLatitude()) + "," +
Double.toString(location.getLongitude());
mLatitudeTextView.setText(String.valueOf(location.getLatitude()));
mLongitudeTextView.setText(String.valueOf(location.getLongitude() ));
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
// You can now create a LatLng Object for use with maps
LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
}
private boolean checkLocation() {
if(!isLocationEnabled())
showAlert();
return isLocationEnabled();
}
private void showAlert() {
final AlertDialog.Builder dialog = new AlertDialog.Builder(this);
dialog.setTitle("Enable Location")
.setMessage("Your Locations Settings is set to 'Off'.\nPlease Enable Location to " +
"use this app")
.setPositiveButton("Location Settings", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface paramDialogInterface, int paramInt) {
Intent myIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(myIntent);
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface paramDialogInterface, int paramInt) {
}
});
dialog.show();
}
50
● Copy dan simpan token tersebut pada notepad atau aplikasi lainnya.
● Tambahkan dependency baru pada app/gradle yaitu
Dependency baru:
//Mapbox dependencies
implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:8.5.1'
implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-locationlayer:0.5.0'
Permissions baru:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"/>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:mapbox="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.mapbox.mapboxsdk.maps.MapView
52
android:id="@+id/mapView"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
● Buka file strings.xml pada folder res/values/ dimana kita akan memasukkan Default Public
Token MapBox yang sudah kita copy sebelumnya.
Sesuaikan kodenya menjadi seperti contoh berikut,
strings.xml
<resources>
<string name="app_name">Latihan Pertemuan 6_2</string>
<string
name="mapbox_access_token">pk.eyJ1IjoidmVsbGlzeW8iLCJhIjoiY2ttNGhqdmt5MDRsNjJ2cnRtd3
MycjB5cyJ9.a0e5Or1vkizrT5XRDmPJQQ</string>
</resources>
● Lalu buka class MainActivity dan sesuaikan juga kodenya menjadi seperti berikut
MainActivity.java
package com.elreginaldcaesarosan.latihanpertemuan6_2;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.PersistableBundle;
import com.mapbox.mapboxsdk.Mapbox;
import com.mapbox.mapboxsdk.maps.MapView;
import com.mapbox.mapboxsdk.maps.MapboxMap;
import com.mapbox.mapboxsdk.maps.OnMapReadyCallback;
import com.mapbox.mapboxsdk.maps.Style;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Mapbox.getInstance(this, getString(R.string.mapbox_access_token));
setContentView(R.layout.activity_main);
mapView = (MapView) findViewById(R.id.mapView);
mapView.onCreate(savedInstanceState);
mapView.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(@NonNull MapboxMap mapboxMap) {
}
53
});
}
});
}
@Override
protected void onStart() {
super.onStart();
mapView.onStart();
}
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mapView.onPause();
}
@Override
protected void onStop() {
super.onStop();
mapView.onStop();
}
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
}
@Override
public void onLowMemory() {
super.onLowMemory();
mapView.onLowMemory();
}
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
}
}
54
● Setelah semuanya sudah disesuaikan, jalankan projek aplikasi dan hasilnya akan menjadi
seperti ini
Latihan
Kembangkan aplikasi LBS Mapbox yang sudah dibuat di aktivitas dengan menambahkan "Markers"
didalam aplikasi.
Penutup
Tugas
Buatlah sebuah aplikasi yang menerapkan MapBox didalamnya dan modifikasi aplikasi tersebut
dengan mengimplementasikan berbagai macam style yang telah disediakan oleh MapBox, contoh :
1. Font-Style
2. Street-Style
3. Markers, dll
55
Modul
7
Database Internal
Tujuan
Praktikan diharapkan dapat menggunakan Android Studio untuk membuat program sederhana pada
smartphone/ emulator. Di akhir praktikum ini, praktikan diharapkan:
Persiapan
1. Buku ajar (jika ada)/diktat kuliah/materi dari sumber lain
2. Alat tulis
3. Kertas Buram
4. Lembar jawaban
5. Lembar penilaian (disiapkan oleh asisten)
6. Komputer yang sudah di-install Android Studio & Emulator didalamnya
7. Android Smartphone (Jika tidak menginstall emulator)
Materi Pokok
Praktikum ini mengasumsikan bahwa praktikan telah mempelajari materi tentang Implementasi
Database Internal pada android. Praktikan juga diharapkan sudah dapat menerapkan penggunaan
menu bar, menu item, dan toolbar untuk mendukung implementasi tersebut. Agar praktikan dapat
mencapai tujuan dalam pertemuan praktikum ketujuh ini, maka praktikan harus aktif bertanya dan
mencoba mempraktekkan tugas-tugas yang ada dalam praktikum ketujuh ini.
56
Proses
Pertama bacalah dulu materi tentang Database Internal pada android selama kira-kira 10 menit.
Berikutnya berdiskusilah dengan teman Anda tentang Database Internal seperti SQLite, diskusi
dilakukan selama 20 menit. Kasus pertama sebagai latihan dikerjakan dalam waktu 30 menit.
Lanjutkan praktikum Anda dengan menyelesaikan soal pada bagian latihan dengan batasan waktu
selama 30 menit. Bagian terakhir adalah tugas, yaitu project yang harus dikerjakan di rumah dan wajib
dikumpulkan pada pertemuan berikutnya.
Aktivitas
1. Praktikan membaca buku ajar (jika ada)/ diktat kuliah/materi dari sumber lain tentang Database
Internal Android sebagai materi bab ketujuh. Temukan bagian penting dalam topik ini,
kemudian tulis sebagai ringkasan hasil belajar.
2. Praktikan berdiskusi tentang Database Internal Android serta menerapkannya dalam sebuah
aplikasi berbasis android.
Strings.xml
<resources>
<string name="app_name">Latihan Pertemuan 7</string>
<string name="action_settings">Settings</string>
<string name="hello_world">Hello world!</string>
<string name="Username">Username</string>
<string name="Password">Password</string>
<string name="Signin">Sign In</string>
<string name="Login">Login</string>
<string name="logout">Logout</string>
<string name="title_activity_welcome">Welcome</string>
<string name="exit">Exit without logout</string>
</resources>
activity_main.xml
<EditText
android:id="@+id/editText2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
57
android:layout_below="@+id/textView2"
android:layout_alignRight="@+id/editText1"
android:ems="10"
android:inputType="textPassword"/>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginTop="52dp"
android:text="@string/Username"
android:textAppearance="?android:attr/textAppearanceMedium" />
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/textView1"
android:layout_alignParentRight="true"
android:layout_marginTop="27dp"
android:layout_marginRight="16dp"
android:ems="10">
<requestFocus />
</EditText>
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/editText1"
android:layout_alignRight="@+id/textView1"
android:text="@string/Password"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/editText1"
android:layout_centerHorizontal="true"
android:layout_marginBottom="22dp"
android:text="@string/Signin"
android:textAppearance="?android:attr/textAppearanceMedium" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/editText2"
android:layout_centerHorizontal="true"
android:layout_marginTop="45dp"
android:onClick="login"
android:text="@string/Login" />
</RelativeLayout>
activity_welcome.xml
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="146dp"
android:onClick="logout"
android:text="@string/logout" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignStart="@+id/button1"
android:layout_alignParentTop="true"
android:layout_marginTop="64dp"
android:text="@string/title_activity_welcome"
android:textAppearance="?android:attr/textAppearanceLarge" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/button1"
android:layout_centerHorizontal="true"
android:layout_marginTop="43dp"
android:onClick="exit"
android:text="@string/exit" />
</RelativeLayout>
● Selanjutnya, buka class Welcome.java dan ubah kodenya menjadi seperti berikut
Welcome.java
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_welcome);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action
59
// bar if it is present.
getMenuInflater().inflate(R.menu.welcome, menu);
return true;
}
public void logout(View view){
SharedPreferences sharedpreferences = getSharedPreferences
(MainActivity.MyPREFERENCES, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.clear();
editor.commit();
moveTaskToBack(true);
Welcome.this.finish();
}
public void exit(View view){
moveTaskToBack(true);
Welcome.this.finish();
}
}
MainActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
username = (EditText)findViewById(R.id.editText1);
password = (EditText)findViewById(R.id.editText2);
}
@Override
protected void onResume() {
sharedpreferences=getSharedPreferences(MyPREFERENCES,
Context.MODE_PRIVATE);
if (sharedpreferences.contains(name))
{
if(sharedpreferences.contains(pass)){
Intent i = new Intent(this, Welcome.class);
startActivity(i);
}
}
super.onResume();
}
public void login(View view){
SharedPreferences.Editor editor = sharedpreferences.edit();
String u = username.getText().toString();
60
String p = password.getText().toString();
editor.putString(name, u);
editor.putString(pass, p);
editor.commit();
Intent i = new Intent(this, Welcome.class);
startActivity(i);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.welcome, menu);
return true;
}
}
● Sekarang jalankan projek jika sudah disesuaikan semua kodenya dan hasilnya akan menjadi
seperti berikut
Login SQLite
activity_main.xml
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginTop="21dp"
android:text="Username" />
<EditText
android:id="@+id/editText1"
61
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/textView1"
android:layout_alignLeft="@+id/textView1"
android:layout_marginTop="10dp">
<requestFocus />
</EditText>
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/editText1"
android:layout_alignLeft="@+id/editText1"
android:layout_marginTop="21dp"
android:text="Password" />
<EditText
android:id="@+id/editText2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/textView2"
android:layout_alignLeft="@+id/textView2"
android:layout_marginTop="10dp"
android:inputType="textPassword" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/editText2"
android:layout_alignLeft="@+id/editText2"
android:layout_marginTop="31dp"
android:text="Login" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/button1"
android:layout_alignBottom="@+id/button1"
android:layout_toRightOf="@+id/button1"
android:text="Register" />
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/button2"
android:layout_alignBottom="@+id/button2"
android:layout_toRightOf="@+id/button2"
android:text="Keluar" />
</RelativeLayout>
activity_admin.xml
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="Logout" />
<RatingBar
android:id="@+id/ratingBar1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/ratingBar1"
android:layout_centerHorizontal="true"
android:layout_marginBottom="16dp"
android:text="Selamat Data Pada Halaman Administrasi" />
</RelativeLayout>
● Buatlah folder resources baru didalam /res bernama menu, dan tambahkan 2 file .xml
didalamnya yaitu,
main.xml
</menu>
admin.xml
</menu>
● Lalu buat class baru bernama DBUserAdapter, dan isikan kodenya seperti berikut
63
DBUserAdapter.java
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
initialValues.put(KEY_USERNAME, username);
initialValues.put(KEY_PASSWORD, password);
return db.insert(DATABASE_TABLE, null, initialValues);
}
Admin.java
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_admin);
Button btnLogout=(Button)findViewById(R.id.button1);
btnLogout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent keli = new Intent(Admin.this,
MainActivity.class);
startActivity(keli);
finish();
}
});
}
@Override
65
MainActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
});
btnLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String username = txtUserName.getText().toString();
String password = txtPassword.getText().toString();
try {
if (username.length() > 0 && password.length() > 0) {
DBUserAdapter dbUser = new DBUserAdapter(MainActivity.this);
dbUser.open();
if (dbUser.Login(username, password)) {
Toast.makeText(MainActivity.this
, "Successfully Logged In"
, Toast.LENGTH_LONG).show();
Intent kela = new Intent(MainActivity.this
, Admin.class);
startActivity(kela);
} else {
Toast.makeText(MainActivity.this
, "Invalid Username/Password"
, Toast.LENGTH_LONG).show();
}
dbUser.close();
}
} catch (Exception e) {
Toast.makeText(MainActivity.this, e.getMessage()
, Toast.LENGTH_LONG).show();
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
Latihan
Kembangkan aplikasi yang sudah dibuat pada aktifitas, dengan menggabungkan fungsi dari
SharedPreferences dengan database SQLite!
Penutup
Tugas
Buatlah sebuah aplikasi CRUD (Tema bebas) dengan mengimplementasikan CRUD didalamnya
dengan syarat harus ada fitur login dan register!
68
Modul
8
Database External
Tujuan
Praktikan diharapkan dapat menggunakan Android Studio untuk membuat program sederhana pada
smartphone/ emulator. Di akhir praktikum ini, praktikan diharapkan dapat:
Persiapan
1. Buku ajar (jika ada)/diktat kuliah/materi dari sumber lain
2. Alat tulis
3. Kertas Buram
4. Lembar jawaban
5. Lembar penilaian (disiapkan oleh asisten)
6. Komputer yang sudah di-install Android Studio & Emulator didalamnya
7. Android Smartphone (Jika tidak menginstall emulator)
Materi Pokok
Praktikum ini mengasumsikan bahwa praktikan telah mempelajari materi tentang Database
External pada Android. Praktikan juga diharapkan sudah memahami materi tentang CRUD database
dengan Java. Agar praktikan dapat mencapai tujuan dalam pertemuan praktikum kedelapan ini,
praktikan harus aktif melihat-lihat contoh program, bertanya, dan mencoba mempraktekkan tugas
dan latihan dalam praktikum delapan yang berisi materi tentang Database External ini.
69
Proses
Langkah pertama bacalah dulu materi tentang implementasi database MySQL selama 10
menit. Kemudian catatlah kegunaan XAMPP dalam mendukung implementasi tersebut dalam waktu
5 menit. Sebagai percobaan buatlah database sederhana untuk menampilkan nama, NRP, dan kelas
dengan menggunakan waktu tidak lebih dari 10 menit. Setelah itu lanjutkan dengan membuat project
baru untuk mencoba menghubungkan koneksi database ke perangkat android anda. Diskusikan
selama 15 menit tentang cara kerja project yang sudah Anda buat, terutama tentang program dan cara
kerjanya. Berikutnya kerjakan projek aplikasi pada aktifitas (kerjakan dan diskusikan dengan teman
Anda dalam 25 menit). Kerjakan latihan dalam waktu 25 menit.
Aktivitas
1. Praktikan membaca buku ajar (jika ada)/ diktat kuliah/materi dari sumber lain tentang Database
External Android sebagai materi bab kedelapan. Temukan bagian penting dalam topik ini,
kemudian tulis sebagai ringkasan hasil belajar.
2. Praktikan berdiskusi tentang Database External Android serta menerapkannya dalam sebuah
program aplikasi android.
Karena kita menggunakan auto increment pada field “ID”, maka saat pengisian data, field
“ID” tidak perlu di-isi.
conn.php
<?php
$db_name = "users_database";
$username = "root";
$password = "";
$servername = "localhost";
mysqli_set_charset($conn ,"utf-8");
?>
login.php
<?php
require "conn.php";
$email = $_POST["email"];
$password = $_POST["psw"];
if($conn){
}else{
71
$usernameQuery = mysqli_query($conn,$sqlCheckEmail);
$loginQuery = mysqli_query($conn,$sqlLogin);
}else{
}else{
}else{
} ?>
Setelah itu simpan 2 file .php tersebut di dalam didalam folder C:\xampp\htdocs\
implementation 'com.android.volley:volley:1.2.0'
implementation 'com.rengwuxian.materialedittext:library:2.1.4'
● Sekarang buka colors.xml yang ada didalam folder res/values/ dan sesuaikan kodenya
seperti berikut ini
colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="purple_200">#FFBB86FC</color>
<color name="purple_500">#FF6200EE</color>
<color name="purple_700">#FF3700B3</color>
<color name="teal_200">#FF03DAC5</color>
<color name="teal_700">#FF018786</color>
<color name="black">#FF000000</color>
72
<color name="white">#FFFFFFFF</color>
<color name="colorPrimary">#000000</color>
<color name="colorPrimaryDark">#000000</color>
<color name="colorAccent">#000000</color>
</resources>
● Lalu buka themes.xml yang ada pada folder res/values/themes/ dan sesuaikan kodenya
seperti berikut
themes.xml
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Theme.LatihanDbExternal"
parent="Theme.MaterialComponents.DayNight.DarkActionBar">
<!-- Primary brand color. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<!-- Secondary brand color. -->
<item name="colorSecondary">@color/teal_200</item>
<item name="colorSecondaryVariant">@color/teal_700</item>
<item name="colorOnSecondary">@color/black</item>
<!-- Status bar color. -->
<item name="android:statusBarColor"
tools:targetApi="l">?attr/colorPrimaryVariant</item>
<!-- Customize your theme here. -->
</style>
<style name="menustyle"
parent="Theme.AppCompat.Light">
<item name="android:background">@android:color/white</item>
</style>
</resources>
● Setelah itu buka file strings.xml pada folder res/values/ dan tambahkan kode berikut
didalamnya.
strings.xml
<string name="prefStatus">loggedin</string>
android:layout_gravity="center_vertical"
android:gravity="center"
android:layout_marginTop="200dp"
android:textSize="40sp"
android:textStyle="bold"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Log out"
android:textAllCaps="false"
android:id="@+id/logout"
android:textColor="@android:color/white"
android:background="@color/colorPrimaryDark"
android:layout_marginTop="50dp"/>
</LinearLayout>
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
● Setelah itu, buat class baru bernama MySingleton.java dan isikan kodenya seperti berikut
MySingleton.java
import android.content.Context;
import com.android.volley.Cache;
import com.android.volley.Network;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
74
import com.android.volley.toolbox.BasicNetwork;
import com.android.volley.toolbox.DiskBasedCache;
import com.android.volley.toolbox.HurlStack;
import com.android.volley.toolbox.Volley;
if (mInstance == null){
mInstance = new MySingleton(context);
}
return mInstance;
}
}
}
● Sekarang buka layout activity_main.xml dan ubah kodenya menjadi seperti ini
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">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_centerVertical="true" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="Login"
75
android:textSize="30sp"
android:textStyle="bold"
android:layout_marginTop="10dp"
android:textColor="@color/colorPrimary" />
<com.rengwuxian.materialedittext.MaterialEditText
android:id="@+id/email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="50dp"
app:met_floatingLabel="normal"
android:background="@android:color/white"
android:hint="Email Address"
android:inputType="textEmailAddress"/>
<com.rengwuxian.materialedittext.MaterialEditText
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
app:met_floatingLabel="normal"
android:layout_marginTop="10dp"
android:background="@android:color/white"
android:hint="Password"
android:inputType="textPassword"/>
<androidx.appcompat.widget.AppCompatCheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Keep Me Logged In"
android:buttonTint="@color/colorPrimaryDark"
android:textColor="@color/colorPrimaryDark"
android:layout_gravity="center"
android:id="@+id/checkbox"
android:layout_marginTop="10dp"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="20dp"
android:text="Login"
android:textColor="@android:color/white"
android:textAllCaps="false"
android:id="@+id/login"
android:background="@color/colorPrimaryDark"/>
</LinearLayout>
</RelativeLayout>
● Lalu buka class MainActivity.java dan sesuaikan kodenya menjadi seperti berikut
76
MainActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.Toast;
import com.android.volley.AuthFailureError;
import com.android.volley.DefaultRetryPolicy;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.rengwuxian.materialedittext.MaterialEditText;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
SharedPreferences sharedPreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
email = findViewById(R.id.email);
password = findViewById(R.id.password);
checkedStatus = findViewById(R.id.checkbox);
sharedPreferences = getSharedPreferences("UserInfo",
Context.MODE_PRIVATE);
String loginStatus = sharedPreferences
.getString(getResources().getString(R.string.prefStatus),"");
if (loginStatus.equals("loggedin")){
startActivity(new Intent(MainActivity.
this,AppStartActivity.class));
finish();
}
login = findViewById(R.id.login);
login.setOnClickListener(v -> {
String tex_email = Objects
.requireNonNull(email.getText()).toString();
String tex_password = Objects
.requireNonNull(password.getText()).toString();
if (TextUtils.isEmpty(tex_email) || TextUtils.isEmpty(tex_password)){
Toast.makeText(MainActivity.this,
"All Fields Required", Toast.LENGTH_SHORT).show();
}
else{
login(tex_email,tex_password);
}
});
}
progressDialog.setIndeterminate(false);
progressDialog.show();
String uRl = "http://192.168.0.7/login.php";
StringRequest request = new StringRequest(Request.Method.POST,
uRl,
(String response) -> {
if (response.equals("Login Success")){
Toast.makeText(MainActivity.this,
response, Toast.LENGTH_SHORT).show();
SharedPreferences.Editor editor = sharedPreferences.edit();
if (checkedStatus.isChecked()){
editor.putString(getResources()
.getString(R.string.prefStatus),"loggedin");
}
else{
editor.putString(getResources()
.getString(R.string.prefStatus),"loggedout");
}
editor.apply();
startActivity(new Intent(MainActivity
.this,AppStartActivity.class));
progressDialog.dismiss();
finish();
}
else {
Toast.makeText(MainActivity.this,
response, Toast.LENGTH_SHORT).show();
progressDialog.dismiss();
}
}, error -> {
Toast.makeText(MainActivity.this,
error.toString(), Toast.LENGTH_SHORT).show();
progressDialog.dismiss();
}){
@Override
protected Map<String, String> getParams() {
HashMap<String,String> param = new HashMap<>();
param.put("email",email);
param.put("psw",password);
return param;
}
};
request.setRetryPolicy(
new DefaultRetryPolicy(30000,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
MySingleton.getmInstance(MainActivity.this).
addToRequestQueue(request);
}
}
Pada bagian variabel String uRl, pastikan untuk mengubah alamat IP menjadi IP dari
komputer kita, jangan memakai http://localhost/.
Lalu jika kita menggunakan android, maka komputer dan perangkat android yang akan
digunakkan harus didalam 1 network yang sama, contoh :
IP Address Komputer:
1. Cek IP Address pada komputer melalui CMD, dan ketikkan “ipconfig”
2. Lalu lihat pada bagian Wireless LAN Adapter Wireless Network Connection, bagian
IPv4 Address.
78
3. Hubungkan juga perangkat android ke network yang sama agar bisa terhubung
databasenya.
Contoh IP Address android : " 192.168.0.XX "
● Terakhir, buat sebuah layour bernama bar_layout.xml dan isikan kodenya seperti ini
bar_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimaryDark"
style="@style/Base.ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/menustyle"
android:id="@+id/toolbar">
</androidx.appcompat.widget.Toolbar>
79
● Setelah semua kode telah disesuaikan, jalankan projek aplikasi dan hasilnya
adalah sebagai berikut.
Latihan
Kembangkan aplikasi yang telah dibuat didalam aktivitas dengan menambahkan fitur register user
baru!
Penutup
Tugas
Kembangkan lagi aplikasi yang telah dibuat pada Aktivitas dan Latihan dengan menampilkan
sebuah dashboard setelah melakukan login pada aplikasi tersebut!