MOBILE PROGAMING
SEMESTER GANJIL TAHUN AKADEMIK 2019/2020
Disusun oleh :
Nama : Tareh Rozzaq Adzdziqri
NIM : 1718033
Jurusan : Teknik Informatika S-1
Kelompok : 07
MOBILE PROGAMING
Disusun Oleh
NIM : 1718033
KELOMPOK : 07
Mengetahui Menyetujui
KATA PENGANTAR
Penulis
ii
DAFTAR ISI
KATA PENGANTAR ............................................................................................. i
DAFTAR ISI ........................................................................................................... ii
DAFTAR GAMBAR .............................................................................................. v
BAB I PENDAHULUAN ....................................................................................... 1
I.1 Latar Belakang ............................................................................................... 1
I.2 Rumusan Masalah .......................................................................................... 2
I.3 Tujuan ............................................................................................................ 2
I.4 Manfaat .......................................................................................................... 2
BAB II INTENT & FRAGMENT .......................................................................... 1
II.1 Landasan Teori ............................................................................................. 1
A. Sejarah Android .......................................................................................... 1
B. Intent ........................................................................................................... 3
C. Fragment ..................................................................................................... 4
II.2 Langkah – Langkah Praktikum ..................................................................... 5
II.3 Tugas 1 : Membuat Program Intent .............................................................. 5
Gambar 2.1 Tampilan awal aplikasi .................................................................. 11
II.4 Tugas 2 : Membuat Fragment .................................................................... 11
II.6 Tugas Rumah 1 : membuat intent untuk menghitung luas segitiga ............ 14
II.7 Tugas Rumah 2 : Membuat tampilan fragment .......................................... 18
II.9 Kesimpulan ................................................................................................. 21
BAB III NAVIGATION & ACTION BAR ............................................................ 1
III.1 Landasan Teori ............................................................................................ 1
A. Navigation ................................................................................................... 1
B. Action Bar ................................................................................................... 2
III.2 Langkah – Langkah Praktikum ................................................................... 7
III.3 Tugas 1 : Membuat tampilan NavigationBar .............................................. 7
III.4 Tugas Rumah 1 : Mengimplementasikan Tampilan Pada Navbar ............ 14
Gambar 3.8 Tampilan Halaman Biodata Melalui Navbar................................. 19
III.5 Kesimpulan ................................................................................................ 19
BAB IV RECYCLERVIEW ................................................................................... 1
IV.1 Landasan Teori ............................................................................................ 1
iii
DAFTAR GAMBAR
Gambar 2.2 Tampilan hasil running program biodata ..................................... 11
Gambar 2.3 Tampilan hasil running program fragment ................................... 14
Gambar 2.4 Tampilan hasil running program menghitung luas segitiga ......... 18
Gambar 2.6 Tampilan program untuk menampilkan fragment ........................ 21
Gambar 3.1 Mengubah Judul ActionBar dengan Nama Activity........................ 2
Gambar 3.2 Mengganti gambar icon ActionBar ................................................ 4
Gambar 3.3 Menampilkan 2 ikon pada action bar ............................................. 6
Gambar 3.4 Tampilan Toolbar ........................................................................... 7
Gambar 3.5 Tampilan hasil dari navigasi ......................................................... 12
Gambar 3.6 Tampilan hasil dari activity biodata ............................................. 13
Gambar 3.7 Tampilan pada Navbar ................................................................. 19
Gambar 4.1 Contoh penggunaan RecyclerView ................................................ 2
Gambar 4.2 Komponen pembentuk RecyclerView............................................. 2
Gambar 4.3 Tampilan hasil running program recycler view .............................. 8
Gambar 4.4 Tampilan hasil running program recycler view dengan tambahan
ikon profil pada tiap list.................................................................................... 13
Gambar 5.1 Tampilan pada saat mengeset waktu alarm .................................... 6
Gambar 5.2 Tampilan saat ada notifikasi alarm ................................................. 6
Gambar 5.3 Tampilan pada saat atur waktu alarm ........................................... 11
Gambar 5.4 Tampilan saat ada notifikasi alarm ............................................... 12
Gambar 5.5 Tampilan saat bilah notifikasi di klik ........................................... 12
Gambar 6.4 Tampilan create ............................................................................ 19
Gambar 6.5 Tampilan read ............................................................................... 20
Gambar 6.6 Tampilan delete ............................................................................ 20
Gambar 6.4 Tampilan create ............................................................................ 31
Gambar 6.5 Tampilan read ............................................................................... 31
Gambar 6.6 Tampilan delete ............................................................................ 31
Gambar 7.1 Tampilan movie list ...................................................................... 11
Gambar 7.2 Prototipe Halaman Home ............................................................. 12
Gambar 7.3 Prototipe Halaman Pendaftaran .................................................... 12
Gambar 7.4 Prototipe Halaman Login ............................................................. 13
vi
BAB I
PENDAHULUAN
I.1 Latar Belakang
Sejak pertama kali diperkenalkan pada 2008, sistem operasi Hp sejuta
umat yaitu Android kerap mengeluarkan versi Android terbaru. Setiap versi
Android terbaru pastinya memiliki fitur baru dan perbaikan bug dari versi
pendahulunya. Selain itu, setiap versi Android memiliki tampilan antarmuka
(UI) yang berbeda sehingga menjadi ciri khas yang melekat di masing-masing
versi. Selain itu, Google juga memberi penamaan yang unik di setiap versi
Android terbarunya. Mulai dari versi Android 1.5 hingga terbaru 9.0 setiap
versinya diberi nama makanan pencuci mulut atau camilan manis seperti kue,
permen, dan lain sebagainya. Tak hanya itu, penamaannya juga mengikuti
urutan abjad yang dimulai dari C, D, E, F, dan seterusnya.
Tanggal :
I-2
I.3 Tujuan
1. Memahami tentang pemrograman Android
2. Mempelajari cara membuat sebuah aplikasi sederhana menggunakan
software Android Studio
3. Menerapkan pemrograman Android pada sebuah project aplikasi
I.4 Manfaat
1. Mahasiswa mampu memahami tentang dasar-dasar pemrograman Android
2. Mahasiswa mampu membuat aplikasi sederhana menggunakan sotware
Android Studio
3. Mahasiswa mampu menerapkan konsep pemrograman Android pada
project aplikasi
Tanggal :
II-1
BAB II
INTENT & FRAGMENT
JumlahPertemuan : 2 x 60 menit
Tanggal :
II-2
Tanggal :
II-3
B. Intent
Intent adalah mekanisme untuk melakukan sebuah aksi dan
komunikasi antar komponen aplikasi pada platform Android. Atau dapat
juga dijelaskan sebagai sebuah object yang memungkinkan kita untuk
dapat berkomunikasi antara Activity satu dengan Activity lainnya. Ada tiga
penggunaan umum Intent dalam aplikasi Android yaitu :
1. Memindahkan satu Activity ke Activity lain dengan atau tidak
membawa data.
2. Menjalankan background Service, misal melakukan sinkronisasi ke
server dan menjalankan proses berulang (Periodic / Scheduler Task).
3. Mengirimkan objek Broadcast ke aplikasi yang membutuhkan.
Misalkan jika aplikasi membutuhkan proses menjalankan sebuah
Background Service setiap aplikasi melakukan Booting. Aplikasi
harus bisa menerima objek Broadcast yang dikirimkan oleh Android
untuk event Booting tersebut.
Intent memiliki dua bentuk, yaitu :
1. Explicit Intent, adalah tipe intent yang digunakan untuk menjalankan
komponen aplikasi dengan tahu detail dari nama kelas yang dituju
misal : com.praktik.activity.DetailActivity. Umumnya intent ini
digunakan untuk mengaktifkan komponen pada aplikasi yang sama.
2. Implicit Intent, adalah tipe intent yang tidak memerlukan detail nama
kelas yang ingin diaktifkan. Ini memungkinkan komponen dari
aplikasi lain bisa merespon request intent yang dijalankan.
Penggunaan tipe intent ini umumnya diperuntukkn guna menjalankan
fitur / fungsi dari komponen aplikasi lain. Contohnya, ketika kita
membutuhkan aplikasi kita untuk mengambil foto , daripada kita harus
membuat sendiri fungsi kamera lebih baik kita menyerahkan proses
tersebut pada aplikasi kamera bawaan dari device atau aplikasi kamera
lain yang telah terinstal sebelumnya pada device. Atau jika kita
membutuhkan fungsi berbagi konten, kita dapat memanfaatkan intent
Nama Aslab Asistensi TTD :
Tanggal :
II-4
Tanggal :
II-5
Tanggal :
II-6
app:layout_constraintVertical_bias="0.108" />
<Button android:id="@+id/btn_biodata"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/biodata"
android:onClick="biodata"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView"
app:layout_constraintVertical_bias="0.04" />
</androidx.constraintlayout.widget.ConstraintLayout>
Tanggal :
II-7
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Nama"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.042"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.535" />
<TextView android:id="@+id/textView17"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Angkatan"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.045"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.757" />
<TextView android:id="@+id/textView18"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Jurusan"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.044"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.676" />
<TextView android:id="@+id/textView16"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="NIM"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.041"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.606" />
<TextView android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Nama"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.042"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.085" />
<TextView android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="NIM"
app:layout_constraintBottom_toBottomOf="parent"
Tanggal :
II-8
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.041"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.157" />
<TextView android:id="@+id/textView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Angkatan"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.045"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.307" />
<TextView android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Jurusan"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.044"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.227" />
<EditText android:id="@+id/input_nama"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10" android:inputType="textPersonName"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.863"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.062" />
<EditText android:id="@+id/input_jurusan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10" android:inputType="textPersonName"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.863"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.221" />
<EditText android:id="@+id/input_nim"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10" android:inputType="textPersonName"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.863"
app:layout_constraintStart_toStartOf="parent"
Tanggal :
II-9
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.145" />
<EditText android:id="@+id/input_angkatan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10" android:inputType="textPersonName"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.863"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.306" />
<Button android:id="@+id/btn_tampil"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="tampilkan"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.534"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.426" />
<TextView android:id="@+id/output_nama"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="60dp"
android:text="...."
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/textView15"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.535" />
</androidx.constraintlayout.widget.ConstraintLayout>
Tanggal :
II-10
package com.example.pertemuan1_intent;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle; import android.view.View;
import android.widget.Button; import android.widget.EditText;
import android.widget.TextView;
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_biodata);
nama_t.setText(nama1);
nim_t.setText(nim1);
jurusan_t.setText(jurusan1);
angkatan_t.setText(angkatan1);
}
});
}
}
Tanggal :
II-11
Tanggal :
II-12
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorPrimary">
<TextView android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Ini adalah fragment 1"
android:textSize="25sp"
android:textColor="#000000" />
</LinearLayout>
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater; import android.view.View;
import android.view.ViewGroup; import
android.widget.TextView;
Source fragment2.xml :
<?xml version="1.0" encoding="utf-8"?> <FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000"
tools:context=".fragment2">
</FrameLayout>
Tanggal :
II-13
package com.example.pertemuan1_fragment;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater; import android.view.View;
import android.view.ViewGroup;
<fragment android:id="@+id/fragment1"
android:name="com.example.pertemuan1_fragment.fragment1"
android:layout_width="0px"
android:layout_height="match_parent"
android:layout_weight="1" />
<fragment android:id="@+id/fragment2"
android:name="com.example.pertemuan1_fragment.fragment2"
android:layout_width="0px"
android:layout_height="match_parent"
android:layout_weight="1" />
</LinearLayout>
Tanggal :
II-14
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
Nama Aslab Asistensi TTD :
Tanggal :
II-15
android:layout_height="wrap_content"
android:layout_marginTop="108dp"
android:text="PERHITUNGAN SEGITIGA"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ALAS"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.125"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.296" />
<EditText
android:id="@+id/pt_alas"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.631"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.285" />
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TINGGI"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.13"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/pt_tinggi"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"
Tanggal :
II-16
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.676"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/btn_hitung"
android:layout_width="96dp"
android:layout_height="52dp"
android:text="HITUNG"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.825"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.609" />
<TextView
android:id="@+id/textView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="HASIL"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.126"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.73" />
<EditText
android:id="@+id/pt_hasil"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.722"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.73" />
</androidx.constraintlayout.widget.ConstraintLayout>
Tanggal :
II-17
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_segi3);
hitung.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v) {
Double alas1 =
Double.parseDouble(alas.getText().toString());
Double tinggi1 =
Double.parseDouble(tinggi.getText().toString());
Double hasil1 = (alas1 * tinggi1) / 2;
hasil.setText(hasil1.toString());
}
});
}
}
Tanggal :
II-18
Tampilan :
Tanggal :
II-19
tools:context=".fragment2">
Tanggal :
II-20
public fragment1() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return
inflater.inflate(R.layout.fragment_fragment1, container,
false);
}
}
public fragment3() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return
inflater.inflate(R.layout.fragment_fragment3, container,
false);
}
}
Tanggal :
II-21
Tampilan :
Tanggal :
III-1
BAB III
NAVIGATION & ACTION BAR
JumlahPertemuan : 2 x 60 menit
Tanggal :
III-2
Tanggal :
III-3
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity
android:name="com.codepath.example.simpleapp.FirstActivi
ty"
android:label="@string/activity_name" >
</activity> </application>
Yang menghasilkan :
Tanggal :
III-4
Tanggal :
III-5
Tanggal :
III-6
Tanggal :
III-7
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle presses on the action bar items
switch (item.getItemId()) {
case R.id.miCompose:
composeMessage();
return true;
case R.id.miProfile:
showProfileView();
return true;
default:
return super.onOptionsItemSelected(item);
} }
Mengenal ToolBar
ToolBar dipekenalkan saat Android Lollipop versi API 21 dirilis
sebagai penerus ActionBar. ToolBar adalah sebuah ViewGroup yang
dapat ditempatkan di mana saja di dalam sebuah layout. Tampilan
ToolBar dapat diatur dengan lebih mudah dibanding ActionBar.
Tanggal :
III-8
android:textColor="#000000"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText android:id="@+id/input_nama"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginTop="52dp"
android:layout_marginEnd="75dp" android:ems="10"
android:inputType="textPersonName" android:text=""
android:textColor="#000000" android:textSize="15dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="40dp"
android:layout_marginTop="120dp" android:text="NIM
:" android:textSize="15dp"
android:textColor="#000000"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText android:id="@+id/input_nim"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginTop="108dp"
android:layout_marginEnd="75dp" android:ems="10"
android:inputType="textPersonName" android:text=""
android:textColor="#000000" android:textSize="15dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="40dp"
android:layout_marginTop="180dp"
android:text="Jurusan :" android:textSize="15dp"
android:textColor="#000000"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText android:id="@+id/input_jur"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginTop="164dp"
android:layout_marginEnd="75dp" android:ems="10"
android:inputType="textPersonName" android:text=""
android:textColor="#000000" android:textSize="15dp"
Tanggal :
III-9
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="40dp"
android:layout_marginTop="240dp"
android:text="Angkatan :" android:textSize="15dp"
android:textColor="#000000"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText android:id="@+id/input_ang"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginTop="224dp"
android:layout_marginEnd="75dp" android:ems="10"
android:inputType="textPersonName" android:text=""
android:textColor="#000000" android:textSize="15dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button android:id="@+id/tampil"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginTop="284dp"
android:layout_marginEnd="145dp"
android:text="TAMPILKAN" android:textColor="#000000"
android:textSize="15dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView android:id="@+id/textView7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginTop="356dp"
android:layout_marginEnd="320dp" android:text="Nama
:" android:textColor="#000000"
android:textSize="15dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.11"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView android:id="@+id/textView8"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginTop="408dp"
android:layout_marginEnd="330dp" android:text="NIM
Tanggal :
III-10
:" android:textColor="#000000"
android:textSize="15dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.106"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView android:id="@+id/textView9"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginTop="460dp"
android:layout_marginEnd="302dp"
android:text="Jurusan :" android:textColor="#000000"
android:textSize="15dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.114"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView android:id="@+id/textView10"
android:layout_width="61dp"
android:layout_height="17dp"
android:layout_alignParentEnd="true"
android:layout_marginTop="508dp"
android:layout_marginEnd="300dp"
android:text="Angkatan :"
android:textColor="#000000" android:textSize="15dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.114"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView android:id="@+id/output_nama"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginTop="356dp"
android:layout_marginEnd="90dp"
android:layout_marginBottom="230dp" android:text=""
android:textColor="#000000" android:textSize="15dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.431"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView android:id="@+id/output_nim"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginTop="32dp"
android:layout_marginEnd="219dp"
Tanggal :
III-11
android:layout_marginBottom="175dp" android:text=""
android:textColor="#000000" android:textSize="15dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.416"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/output_nama"
/>
<TextView android:id="@+id/output_jur"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginTop="32dp"
android:layout_marginEnd="156dp"
android:layout_marginBottom="123dp" android:text=""
android:textColor="#000000" android:textSize="15dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.43"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/output_nim" />
<TextView android:id="@+id/output_ang"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/output_jur"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginTop="-100dp"
android:layout_marginEnd="244dp"
android:layout_marginBottom="75dp" android:text=""
android:textColor="#000000" android:textSize="15dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.43"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/output_jur" />
Tanggal :
III-12
Tanggal :
III-13
Tanggal :
III-14
<EditText
android:id="@+id/in_nama"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.772"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.116" />
<EditText
android:id="@+id/in_nim"
android:layout_width="wrap_content"
Nama Aslab Asistensi TTD :
Tanggal :
III-15
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.772"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.208" />
<EditText
android:id="@+id/in_jurusan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.772"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.294" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="NIM"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.129"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.226" />
<Button
android:id="@+id/btn_tampilkan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TAMPILKAN"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.853"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.374" />
Tanggal :
III-16
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Jurusan"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.133"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.307" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Nama"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.134"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.133" />
<TextView
android:id="@+id/textView10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Nama"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.128"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.476" />
<TextView
android:id="@+id/out_jurusan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="........"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.401"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.625" />
Tanggal :
III-17
<TextView
android:id="@+id/out_nama"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="........"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.401"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.476" />
<TextView
android:id="@+id/out_nim"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="........"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.396"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.547" />
<TextView
android:id="@+id/textView13"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Jurusan"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.13"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.625" />
<TextView
android:id="@+id/textView14"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="NIM"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.122"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
Tanggal :
III-18
app:layout_constraintVertical_bias="0.547" />
</androidx.constraintlayout.widget.ConstraintLayout>
<string name="menu_home">Home</string>
<string name="menu_gallery">Biodata</string>
<string name="menu_slideshow">Segitiga</string>
<string name="menu_tools">Tools</string>
<string name="menu_share">Share</string>
<string name="menu_send">Send</string>
</resources>
Tanggal :
III-19
Analisa :
Untuk membuat tampilan Navigation Bar menggunakan menu Activity
Navigation Drawer. Tampilan menu navigation bar yaitu biodata dan
segitiga di konfigurasi di dalam file activity_main_drawer pada
android:tittle dan untuk action barnya dalam string.xml
File Fragment_gallery.xml ini berisikan konfigurasi tampilan -
tampilan seperti textview, editview dll. Fragment ini terhubung oleh tittle
yang ada pada navigation bar menu melalui id dan nama fragment, Ketikan
Menu Navigation bar Biodata di klik maka langsung menuju ke halaman
ini.
III.5 Kesimpulan
1. Mahasiswa dapat memahami konsep dasar Navigation dan Action Bar
2. Mahasiswa dapat mengimplementasikan pembuatan navigation pada
android
3. Mahasiswa dapat membuat action bar sederhana pada android studio
Tanggal :
V-1
BAB IV
RECYCLERVIEW
JumlahPertemuan : 2 x 60 menit
Tanggal :
V-2
RecyclerView
Tanggal :
V-3
Tanggal :
V-4
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-
auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
card_view:cardCornerRadius="5dp"
card_view:cardElevation="3dp"
card_view:cardUseCompatPadding="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="5dp"
android:layout_margin="5dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="5dp"
android:layout_margin="5dp">
<TextView
android:id="@+id/txt_nama_mahasiswa"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/txt_nim_mahasiswa"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/txt_angkatan_mahasiswa"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/txt"
android:layout_width="match_parent"
Tanggal :
V-5
android:layout_height="wrap_content"/>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
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 =
(RecyclerView)findViewById(R.id.recyclerview);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(adapter);
}
Tanggal :
V-6
}
}
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
@NonNull
@Override
public MahasiswaAdapter.MahasiswaViewHolder
onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
{
LayoutInflater layoutInflater =
LayoutInflater.from(parent.getContext());
View view =
layoutInflater.inflate(R.layout.item_mahasiswa, parent,
false);
return new MahasiswaViewHolder(view);
}
holder.txtNama.setText(dataList.get(position).getNama());
holder.txtNpm.setText(dataList.get(position).getNim());
holder.txtNoHp.setText(dataList.get(position).getAngkatan())
;
}
@Override
public int getItemCount() {
return (dataList != null) ? dataList.size() : 0;
}
Tanggal :
V-7
class Mahasiswa {
private String nama, nim, angkatan;
public Mahasiswa(String nama, String nim, String
angkatan)
{
this.nama = nama;
this.nim = nim;
this.angkatan = angkatan;
}
Tanggal :
V-8
Tanggal :
V-9
card_view:cardCornerRadius="5dp"
card_view:cardElevation="3dp"
card_view:cardUseCompatPadding="true">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation = "vertical"
android:padding="6dp">
<ImageView
android:id="@+id/profile_data"
android:layout_width="74dp"
android:layout_height="66dp"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginStart="8dp"
android:layout_marginTop="6dp"
android:src="@drawable/ic_launcher_background"/>
<TextView
android:id="@+id/txt_nama"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignTop="@id/profile_data"
android:layout_marginStart="7dp"
android:layout_marginTop="0dp"
android:layout_toEndOf="@id/profile_data"
/>
<TextView
android:id="@+id/txt_kerja"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/txt_nama"
android:layout_marginStart="7dp"
android:layout_marginTop="5dp"
android:layout_toEndOf="@id/profile_data"/>
<TextView
android:id="@+id/txt_usia"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/txt_kerja"
android:layout_marginStart="7dp"
android:layout_marginTop="5dp"
android:layout_toEndOf="@id/profile_data"/>
</RelativeLayout>
</androidx.cardview.widget.CardView>
Tanggal :
V-10
Tanggal :
V-11
RecyclerView.Adapter<ProfileAdapter.ProfileViewHolder>{
private ArrayList<Profile> dataList;
public ProfileAdapter(ArrayList<Profile> dataList)
this.dataList = dataList;
}
@NonNull
@Override
public ProfileAdapter.ProfileViewHolder
onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
{
LayoutInflater layoutInflater =
LayoutInflater.from(parent.getContext());
View view =
layoutInflater.inflate(R.layout.item_profile, parent,
false);
return new ProfileViewHolder(view);
}
@Override
public void onBindViewHolder(ProfileViewHolder holder,
int position) {
holder.txtnama.setText(dataList.get(position).getNama());
holder.txtkerja.setText(dataList.get(position).getKerja());
holder.txtusia.setText(dataList.get(position).getUsia());
holder.picture_data.setImageDrawable(dataList.get(position).
getPicture());
}
@Override
public int getItemCount() {
return (dataList != null) ? dataList.size() : 0;
}
public class ProfileViewHolder extends
RecyclerView.ViewHolder {
TextView txtnama;
TextView txtkerja;
TextView txtusia;
ImageView picture_data;
public ProfileViewHolder(View itemView) {
super(itemView);
txtnama = (TextView)
itemView.findViewById(R.id.txt_nama);
txtkerja = (TextView)
itemView.findViewById(R.id.txt_kerja);
txtusia = (TextView)
itemView.findViewById(R.id.txt_usia);
picture_data = (ImageView)
itemView.findViewById(R.id.profile_data);
}
Tanggal :
V-12
}
}
profileArrayList.add(new Profile("Tareh",
"Wirausaha", "24", getDrawable(R.drawable.orang)));
profileArrayList.add(new
Profile("Dodit","Artis","32",
getDrawable(R.drawable.orang2)));
profileArrayList.add(new
Profile("Budi","Pemadam","27",getDrawable(R.drawable.orang3)
));
profileArrayList.add(new
Profile("William","Polisi","22",getDrawable(R.drawable.orang
4)));
Tanggal :
V-13
Gambar 4.4 Tampilan hasil running program recycler view dengan tambahan
ikon profil pada tiap list
Analisa :
File activity_main diatas mempunyai fungsi untuk menampilkan fungsi
recycler view ke dalam bentuk array list dan memberikan inisialisasi variable
id recyclerView, yang mana akan digunakan untuk memanggil di
MainActivity
File item_profile diatas, mempunyai fungsi mendesain komponen -
komponen apa saja yang akan digunakan, seperti textview di tandai dengan
perintah <TextView> untuk mengisikan Nama, Kerja, dan Usia, dan
Imageview digunakan untuk memanggil file gambar ditandai dengan perintah
<ImageView>. File Item_profile.xml ini nantinya akan di tampilkan pada file
MainActivity.
File Profile.java diatas berisikan variable yang diambil pada file
item_profile.xml. Pada file Profile.java ini mempunyai method setter dan
method getter yang digunakan untuk mengisi value dan mengembalikan nilai
value tersebut untuk ditampilkan.
Nama Aslab Asistensi TTD :
Tanggal :
V-14
Tanggal :
V-1
BAB V
BACKGROUND PROCESS
JumlahPertemuan : 2 x 60 menit
Tanggal :
V-2
membutuhkan thread terpisah jika kita ingin melakukan proses yang bersifat
komputasi intensif atau yang memakan waktu.
Contoh pemanfaatan Service sudah banyak sekali, beberapa diantarnya :
1. Aplikasi social media atau aplikasi yang memiliki kemampuan untuk
menerima pushnotification, pasti memiliki sebuah service yang berjalan
dalam posisi stand by untuk selalu menerima pesan yang masuk atau juga
untuk mendownload file.
2. Aplikasi chatting juga membutuhkan service untuk melakukan
pengiriman dan menerima pesan yang dikirimkan oleh pengguna.
3. Aplikasi pendengar musik juga melakukan hal yang sama. Untuk
memberikan pengalaman yang lebih baik kepada pengguna, aplikasi
pendengar musik biasanya meletakkan proses streaming atau memainkan
musik di komponen Service dengan tetap mempertahankan integrasi
dengan komponen lain misalnya seperti notifikasi.
Secara umum terdapat dua bentuk dari Service, yaitu :
1. Started Service
Service berjenis ini adalah tipe yang dijalankan oleh komponen lain,
misal Activity. Sekali dijalankan, service ini akan berjalan selama belum
dimatikan atau proses yang dijalankan selesai. Walaupun komponen
yang lain di stop atau dimatikan oleh Android, sistem atau Activity sudah
di destroy, Service akan tetap berjalan. Umunya penggunaan service ini
adalah untuk melakukan proses yang tidak memberikan nilai balik ke
komponen yang memanggil. Contohnya, adalah mendownload atau
mengupload file dari dan ke server.
2. Bound Service
Service jenis ini merupakan tipe service yang dijalankan oleh komponen
lain, namun saling mengikat satu sama lain. Hubungan yang terjadi antar
kedua komponen tersebut seperti client-server. Bisa saling menerima
hasil dan menerima request yang ada. Pada service ini dimungkinkan
terjadi proses IPC (Interprocess Communication). Service ini akan tetap
Tanggal :
V-3
Tanggal :
V-4
B. Broadcast Receiver
Ketika mengembangkan sebuah aplikasi di Android, adakalanya kita
butuh menjalankan suatu proses tertentu ketika sebuah proses lain telah
terjadi. Misal, kita ingin menjalankan sesuatu ketika device Android sudah
selesai booting dengan sempurna. Kemampua ini dapat kita manfaatkan
untuk memberi pengalaman yang lebih baik. Disinilah komponen broadcast
receiver berperan penting. Menurut definisinya, broadcast receiver adalah
cara sederhana untuk menindaklanjuti sebuah broadcast message yang
dipancarkan oleh dirinya sendiri, aplikasi lain atau sistem Android.
Sementara itu, broadcast message adalah pesan yang akan dipancarkan
melalui objek intent. Saat ini banyak aplikasi yang menggunakan validasi
pengguna dengan mengirimkan kode verifikasi melalui SMS. Tanpa disadari,
ketika SMS tersebut masuk dan ia berasal dari provider aplikasi, maka akan
ada komponen dari aplikasi lain yang akan menindaklanjuti dan memproses
pesan tadi. Misalnya, dengan melakukan konfirmasi proses validasi tersebut
dengan cara menghubungi sebuah API di server. Interaksi antara
BroadcastReceiver dengan Android System.
Pada materi kali ini praktikan akan belajar bagaimana
mengimplementasikan dua mekanisme umum dalam memanfaatkan
komponen BroadcastReceiver, yaitu :
a. Implementasi BroadcastReceiver untuk menerima event yang
dibroadcast oleh sistem Android. Praktikan akan praktik bagaimana
menerima broadcast ketika ada SMS yang masuk.
b. Implementasi BroadcastReceiver untuk komunikasi antar aplikasi.
Tanggal :
V-1
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical"
android:gravity="center">
<TextView
android:id="@+id/txt_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TIME"
android:textSize="20dp"
android:textColor="#288EBD"
android:layout_marginTop="-100dp"/>
<Button
android:id="@+id/btn_open"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Open Time Picker"
android:layout_marginTop="30dp"
android:onClick="onClick"/>
<Button
android:id="@+id/btn_cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="cancel"
android:layout_marginTop="30dp"/>
</LinearLayout>
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.Intent;
Nama Aslab Asistensi TTD :
Tanggal :
V-2
import android.os.Build;
import androidx.core.app.NotificationCompat;
channel_1.setLockscreenVisibility(Notification.VISIBILITY_PR
IVATE);
getManager().createNotificationChannel(channel_1);
}
return mManager;
}
public NotificationCompat.Builder
getChannel_1Notification(){
return new
NotificationCompat.Builder(getApplicationContext(),
channel1id)
.setSmallIcon(R.drawable.ic_satu)
.setContentTitle("Get Work")
.setContentText("it's about late...")
}
}
Tanggal :
V-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=".MainActivity">
<intent-filter>
<action
android:name="android.intent.action.MAIN" />
<category
android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".AlertReceiver"/>
</application>
</manifest>
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.app.TimePickerDialog;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.TimePicker;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.NotificationCompat;
import androidx.fragment.app.DialogFragment;
import java.text.DateFormat;
import java.util.Calendar;
Tanggal :
V-4
implements TimePickerDialog.OnTimeSetListener,
View.OnClickListener {
private TextView txt;
Button button, button_cencel;
private NotificationHelper notificationHelper;
Calendar c;
int jam, menit;
@Override
protected void onCreate(final Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
c = Calendar.getInstance();
jam = c.get(Calendar.HOUR_OF_DAY);
menit = c.get(Calendar.MINUTE);
button_cencel = (Button)
findViewById(R.id.btn_cancel);
button_cencel.setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View v) {
cancelAlarm();
}
});
}
@Override
public void onTimeSet(TimePicker view, int hourOfDay,
int minute) {
c.set(Calendar.HOUR_OF_DAY, hourOfDay);
c.set(Calendar.MINUTE, minute);
c.set(Calendar.SECOND, 0);
updateTime(c);
startAlarm(c);
}
txt.setText(timeText);
}
Tanggal :
V-5
alarmManager.setExact(AlarmManager.RTC_WAKEUP,
c.getTimeInMillis(), b);
}
alarmManager.cancel(b);
txt.setText("Alarm Canceled");
}
@Override
public void onClick(View v) {
DialogFragment timePicker = new
TimePickerFragment();
timePicker.show(getSupportFragmentManager(), "Time
Picker");
}
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.text.format.DateFormat;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.DialogFragment;
import java.util.Calendar;
Tanggal :
V-6
Calendar c;
int jam, menit;
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle
savedInstanceState)
{
c = Calendar.getInstance();
jam = c.get(Calendar.HOUR_OF_DAY);
menit = c.get(Calendar.MINUTE);
Tanggal :
V-7
pada bilah notifikasi android. Pada kelas ini digunakan untuk menampilkan
alert ketika alarm berbunyi. Pada kelas timepickerfragment, berisi program
untuk mengeset alarm.
V.4 Tugas Rumah 1 : Membuat Background Proccess dengan Intent
Source Code activity_main.xml :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorPrimary"
android:gravity="center"
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:id="@+id/tv_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TIME"
android:textColor="#FFFF"
android:textSize="20sp" />
<Button
android:id="@+id/btn_buka"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:text="BUKA TIME PICKER" />
<Button
android:id="@+id/btn_batal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="BATAL" />
</LinearLayout>
Tanggal :
V-8
notificationChannel.setLightColor(R.color.colorPrimaryDark);
getManager().createNotificationChannel(notificationChannel);
}
public NotificationManager getManager(){
if(notificationManager == null){
notificationManager =
(NotificationManager)getSystemService(Context.NOTIFICATION_SE
RVICE);
}
return notificationManager;
}
public NotificationCompat.Builder
getChannel_Notification(){
Intent notifyIntent = new Intent(this,
MainActivity.class);
PendingIntent notifyPendingIntent =
PendingIntent.getActivity( this, 0, notifyIntent,
PendingIntent.FLAG_UPDATE_CURRENT );
return new
NotificationCompat.Builder(getApplicationContext(),channelId)
.setSmallIcon(R.drawable.ic_alarm_black_24dp)
.setContentIntent(notifyPendingIntent);
}
}
import androidx.core.app.NotificationCompat;
notificationHelper.getManager().notify(1,builder.build());
}
}
Tanggal :
V-9
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity"
android:launchMode="singleTask"
android:taskAffinity=""
android:excludeFromRecents="true">
<intent-filter>
<action
android:name="android.intent.action.MAIN" />
<category
android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".AlertReceiver"/>
</application>
</manifest>
Source Code MainActivity.Java
public class MainActivity extends AppCompatActivity
implements TimePickerDialog.OnTimeSetListener,
View.OnClickListener {
private TextView tvTime;
private Button btnOpen, btnCancel;
private NotificationHelper notificationHelper;
Tanggal :
V-10
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvTime = findViewById(R.id.tv_time);
btnOpen = findViewById(R.id.btn_open);
btnCancel = findViewById(R.id.btn_cancel);
calendar = Calendar.getInstance();
jam = calendar.get(Calendar.HOUR_OF_DAY);
menit = calendar.get(Calendar.MINUTE);
btnOpen.setOnClickListener(this);
btnCancel.setOnClickListener(this);
}
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int
minute) {
calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND,0);
updateTime(calendar);
startAlarm(calendar);
}
tvTime.setText(timeText);
}
alarmManager.setExact(AlarmManager.RTC_WAKEUP,
c.getTimeInMillis(), b);
}
Tanggal :
V-11
getSystemService(Context.ALARM_SERVICE);
Intent a = new Intent(this, AlertReceiver.class);
PendingIntent b = PendingIntent.getBroadcast(this, 1,
a, 0);
alarmManager.cancel(b);
tvTime.setText("Alarm Canceled");
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_open:
DialogFragment timePicker = new
TimePickerFragment();
timePicker.show(getSupportFragmentManager(),
"Time Picker");
break;
case R.id.btn_cancel:
cancelAlarm();
break;
}
}
}
Tanggal :
V-12
Tanggal :
V-13
Tanggal :
VI-1
BAB VI
SQLITE DATABASE
JumlahPertemuan : 2 x 60 menit
Tanggal :
VI-2
dengan bebas menyalin database antara sistem 32-bit dan 64bit atau
antara arsitektur yang berbeda flatform. Fitur-fitur ini membuat SQLite
menjadi pilihan populer sebagai Application File Format.
SQLite telah didukung oleh banyak bahasa pemrograman seperti C,
C ++, BASIC, C #, Python, Java dan Delphi. Dukungan dari COM
(ActiveX) membuat SQLite dapat diakses ke bahasa scripted di
Windows seperti VB Script dan JavaScript, sehingga akan menambah
kemampuan untuk aplikasi HTML. Dukungan terhadap database ini
juga tersedia di sistem operasi embedded seperti iOS, Android, Symbian
OS, Maemo, Blackberry dan WebOS karena ukurannya yang kecil dan
mudah digunakan.
Berikut ini beberapa keunggulan SQLite :
1. SQLite tidak memerlukan proses atau sistem server yang terpisah
untuk beroperasi (Serverless).
2. SQLite hadir dengan zero-configuration, yang berarti tidak ada
setup atau administrasi yang dibutuhkan.
3. Database SQLite yang lengkap disimpan dalam file tunggal yang
tersimpan dalam disk serta bersifat cross-platform.
4. SQLite sangat kecil dan ringan, kurang dari 400KiB untuk
konfigurasi lengkap atau kurang dari 250KiB dengan fitur opsional
dihilangkan.
5. SQLite bersifat mandiri, yang berarti tidak ada dependensi
eksternal.
6. Transaksi SQLite sepenuhnya sesuai dengan ACID,
memungkinkan akses yang aman dari banyak proses.
7. SQLite mendukung sebagian besar fitur bahasa query yang
ditemukan dalam standar SQL92 (SQL2).
8. SQLite ditulis dalam ANSI-C dan menyediakan API yang
sederhana dan mudah digunakan.
Tanggal :
VI-3
9. SQLite tersedia di semua sistem operasi baik ini UNIX (Linux, Mac
OS-X, Android, iOS) dan Windows (Win32, WinCE, WinRT).
8.3.2 SQLite java classes
A. Cursor
SQLiteDatabase selalu menyajikan hasil berupa Cursor
dalam format tabel yang menyerupai database SQL. Anda bisa
menganggap data sebagai larik baris dan cursor adalah pointer ke
dalam satu baris data terstruktur. Kelas Cursor menyediakan
metode untuk menggerakan cursor melalui struktur data, dan
metode untuk mendapatkan data dari bidang-bidang setiap baris.
Kelas Cursor memiliki sejumlah subkelas yang
mengimplementasikan cursor untuk tipe data tertentu, yaitu:
1. SQLiteCursor untuk mengekspos hasil query dari sebuah
SQLiteDatabase. SQLiteCursor tidak disinkronkan secara
internal, sehingga kode yang menggunakan SQLiteCursor dari
beberapa thread harus melakukan sinkronisasi sendiri saat
menggunakan SQLiteCursor.
2. MatrixCursor adalah implementasi cursor lengkap dan tidak
tetap, yang didukung oleh larik objek yang secara otomatis
meluaskan kapasitas internal bila diperlukan.
Beberapa operasi umum yang ada pada cursor adalah :
1. getCount(), mengembalikan jumlah baris dalam cursor.
2. getColumnNames(), mengembalikan larik string yang berisi
nama semua kolom dalam rangkaian hasil dalam urutan
pencantumannya dalam hasil/result.
3. getPosition(), mengembalikan posisi cursor saat ini dalam
rangkaian baris.
4. Getter tersedia untuk tipe data tertentu, seperti getString(int
column) dan getInt(int column).
Tanggal :
VI-4
Tanggal :
VI-5
dalam ini kuncinya adalah nama kolom dan nilainya untuk cell.
Satu instance ContentValues menyatakan satu baris tabel.
Tanggal :
VI-6
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:gravity="center"
tools:context=".MainActivity">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="create"
android:onClick="btn_create"
android:layout_marginTop="20dp"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="read"
android:onClick="btn_read"
android:layout_marginTop="10dp"/>
</LinearLayout>
android:paddingRight="@dimen/activity_horizontal_margin"
Tanggal :
VI-7
android:paddingTop="@dimen/activity_vertical_margin"
android:gravity="center"
android:orientation="vertical"
tools:context=".MainCreate">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello welcome to Create" />
<EditText
android:id="@+id/create_nama"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:hint="Nama" />
<EditText
android:id="@+id/create_kelas"
android:hint="Kelas"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/create_btn"
android:layout_marginTop="20dp"
android:text="CREATE"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context=".MainRead">
<ListView
android:id="@+id/list_mahasiswa"
android:layout_width="match_parent"
Tanggal :
VI-8
android:layout_height="wrap_content"/>
</LinearLayout>
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:gravity="center"
android:orientation="vertical"
tools:context=".MainUpdel">
<EditText
android:id="@+id/updel_nama"
android:layout_marginTop="20dp"
android:hint="Nama"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<EditText
android:id="@+id/updel_kelas"
android:hint="Skill"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/btn_up"
android:layout_marginTop="20dp"
android:text="UPDATE"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/btn_del"
android:text="DELETE"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
Tanggal :
VI-9
<LinearLayout
android:layout_weight="2"
android:layout_width="0dp"
android:layout_height="wrap_content">
<ImageView
android:layout_width="80dp"
android:layout_height="80dp"
android:id="@+id/iconid"
android:src="@drawable/ic_person"/>
</LinearLayout>
<LinearLayout
android:layout_gravity="center"
android:orientation="vertical"
android:layout_weight="5"
android:layout_width="0dp"
android:layout_height="wrap_content">
<TextView
android:textColor="@color/colorPrimary"
android:text="NAMA"
android:id="@+id/text_nama"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textStyle="bold"
android:layout_alignLeft="@+id/rating"
android:layout_alignStart="@+id/rating" />
<TextView
android:textColor="@color/colorPrimary"
android:text="KELAS"
android:id="@+id/text_kelas"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/text_nama"
android:layout_toRightOf="@+id/thumbnail_offline"
android:layout_toEndOf="@+id/thumbnail_offline" />
</LinearLayout>
</LinearLayout>
import android.content.ContentValues;
import android.content.Context;
Tanggal :
VI-10
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import java.util.ArrayList;
import java.util.List;
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE_MAHASISWA);
}
@Override
public void onUpgrade(SQLiteDatabase db, int
oldVersion, int newVersion) {
Tanggal :
VI-11
if (cursor.moveToFirst()) {
do {
Mahasiswa mdKontak = new Mahasiswa();
mdKontak.set_id(cursor.getString(0));
mdKontak.set_nama(cursor.getString(1));
mdKontak.set_kelas(cursor.getString(2));
judulModelList.add(mdKontak);
} while (cursor.moveToNext());
}
db.close();
return judulModelList;
}
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
Nama Aslab Asistensi TTD :
Tanggal :
VI-12
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
@Override
public int getCount() {
return movieItems.size();
}
@Override
public Object getItem(int location) {
return movieItems.get(location);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView,
ViewGroup parent) {
if (inflater == null)
inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null)
convertView =
inflater.inflate(R.layout.costum_list, null);
Mahasiswa m = movieItems.get(position);
Tanggal :
VI-13
return convertView; }
}
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import androidx.appcompat.app.AppCompatActivity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Tanggal :
VI-14
setContentView(R.layout.activity_main);
}
public void btn_create(View view){
Intent a = new Intent(MainActivity.this,
MainCreate.class);
startActivity(a);
}
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.create);
db = new MyDatabase(this);
Snama = String.valueOf(Enama.getText());
Skelas= String.valueOf(Ekelas.getText());
if (Snama.equals("")){
Tanggal :
VI-15
Enama.requestFocus();
Toast.makeText(MainCreate.this, "Silahkan
isi nama", Toast.LENGTH_SHORT).show();
} else if (Skelas.equals("")){
Ekelas.requestFocus();
Toast.makeText(MainCreate.this, "Silahkan
isi kelas", Toast.LENGTH_SHORT).show();
} else {
Enama.setText("");
Ekelas.setText("");
Toast.makeText(MainCreate.this, "Data
telah ditambah", Toast.LENGTH_SHORT).show();
db.CreateMahasiswa(new Mahasiswa(null,
Snama, Skelas));
}
});
}
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import java.util.ArrayList;
import java.util.List;
Tanggal :
VI-16
setContentView(R.layout.read);
db = new MyDatabase(this);
if ((listMahasiswa.isEmpty()))
Toast.makeText(MainRead.this, "Tidak ada
data", Toast.LENGTH_SHORT).show();
else {
}
}
}
@Override
public void onItemClick(AdapterView<?> parent, View
view, int i, long l) {
Object o = mListView.getItemAtPosition(i);
Mahasiswa obj_itemDetails = (Mahasiswa)o;
@Override
protected void onResume() {
super.onResume();
listMahasiswa.clear();
mListView.setAdapter(adapter_off);
Tanggal :
VI-17
if ((listMahasiswa.isEmpty()))
Toast.makeText(MainRead.this, "Tidak ada
data", Toast.LENGTH_SHORT).show();
else {
}
}
}
}
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.updel);
db = new MyDatabase(this);
Intent i = this.getIntent();
Sid = i.getStringExtra("Iid");
Snama = i.getStringExtra("Inama");
Skelas = i.getStringExtra("Ikelas");
Enama.setText(Snama);
Ekelas.setText(Skelas);
Button btnUpdate = (Button)
findViewById(R.id.btn_up);
btnUpdate.setOnClickListener(new
Tanggal :
VI-18
View.OnClickListener() {
@Override
public void onClick(View view) {
Snama = String.valueOf(Enama.getText());
Skelas = String.valueOf(Ekelas.getText());
if (Snama.equals("")){
Enama.requestFocus();
Toast.makeText(MainUpdel.this,
"Silahkan isi nama", Toast.LENGTH_SHORT).show();
} else if (Skelas.equals("")){
Ekelas.requestFocus();
Toast.makeText(MainUpdel.this,
"Silahkan isi kelas", Toast.LENGTH_SHORT).show();
} else {
db.UpdateMahasiswa(new Mahasiswa(Sid,
Snama, Skelas));
Toast.makeText(MainUpdel.this, "Data telah
diupdate", Toast.LENGTH_SHORT).show();
finish();
}
} });
Button btnDelete = (Button)
findViewById(R.id.btn_del);
btnDelete.setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View view) {
db.DeleteMahasiswa(new Mahasiswa(Sid,
Snama, Skelas));
Toast.makeText(MainUpdel.this, "Data telah
dihapus", Toast.LENGTH_SHORT).show();
finish();
}
});
}
}
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainCreate"/>
<activity android:name=".MainRead"/>
<activity android:name=".MainUpdel"/>
Nama Aslab Asistensi TTD :
Tanggal :
VI-19
<activity android:name=".MainActivity">
<intent-filter>
<action
android:name="android.intent.action.MAIN" />
<category
android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Tanggal :
VI-20
Analisa :
Tanggal :
VI-21
}
public void CreateKue (Kue mdNotif)
{
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(tb_kue_id, mdNotif.get_id());
values.put(tb_kue_namakue, mdNotif.get_namakue());
values.put(tb_kue_harga, mdNotif.get_harga());
db.insert(tb_Kue, null, values);
db.close();
}
public List<Kue> ReadKue()
{
List<Kue> judulModelList = new ArrayList<Kue>();
String selectQuery = "SELECT * FROM " + tb_Kue;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
if (cursor.moveToFirst())
{
do
{
Kue mdKontak = new Kue();
mdKontak.set_id(cursor.getString(0));
Tanggal :
VI-22
mdKontak.set_namakue(cursor.getString(1));
mdKontak.set_harga(cursor.getString(2));
judulModelList.add(mdKontak);
} while (cursor.moveToNext());
}
db.close();
return judulModelList;
}
public int UpdateKue (Kue mdNotif)
{
SQLiteDatabase db = this.getWritableDatabase();
}
public String get_id() {
return _id; }
Tanggal :
VI-23
{
return _namakue;
}
Tanggal :
VI-24
Tanggal :
VI-25
{
if (inflater == null)
inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null)
convertView =
inflater.inflate(R.layout.activity_custom_list, null);
Tanggal :
VI-26
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class MainCreate extends AppCompatActivity {
private MyDatabase db;
private EditText Enamakue, Eharga;
private String Snamakue, Sharga;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_create);
db = new MyDatabase(this);
Enamakue = (EditText)
findViewById(R.id.create_namakue);
Eharga = (EditText)
findViewById(R.id.create_harga);
Button btnCreate = (Button)
findViewById(R.id.create_btn);
btnCreate.setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View view) {
Snamakue =
String.valueOf(Enamakue.getText());
Sharga = String.valueOf(Eharga.getText());
if (Snamakue.equals("")){
Enamakue.requestFocus();
Toast.makeText(MainCreate.this,
"Silahkan isi Nama
Kue",Toast.LENGTH_SHORT).show();
}
else if (Sharga.equals("")){
Eharga.requestFocus();
Toast.makeText(MainCreate.this,
"Silahkan isi
Harga", Toast.LENGTH_SHORT).show();
else {
Enamakue.setText("");
Eharga.setText("")
Toast.makeText(MainCreate.this,
Tanggal :
VI-27
"Data telah
ditambah",
Toast.LENGTH_SHORT).show();
db.CreateKue(new Kue(null, Snamakue,
Sharga));
Intent a = new
Intent(MainCreate.this,
MainActivity.class);
startActivity(a);
}
}
}
);
}
}
Tanggal :
VI-28
judulModel.set_id(cn.get_id());
judulModel.set_namakue(cn.get_namakue());
judulModel.set_harga(cn.get_harga());
ListKue.add(judulModel);
if ((ListKue.isEmpty()))
Toast.makeText(MainRead.this, "Tidak ada
data", Toast.LENGTH_SHORT).show();
else
{
}
}
}
@Override
public void onItemClick(AdapterView<?> parent, View
view, int i, long l)
{
Object o = mListView.getItemAtPosition(i);
Kue obj_itemDetails = (Kue)o;
String Sid = obj_itemDetails.get_id();
String Snamakue = obj_itemDetails.get_namakue();
String Sharga = obj_itemDetails.get_harga();
Intent goUpdel = new Intent(MainRead.this,
MainUpdel.class);
goUpdel.putExtra("Iid", Sid);
goUpdel.putExtra("Inamakue", Snamakue);
goUpdel.putExtra("Iharga", Sharga);
startActivity(goUpdel);
}
@Override
protected void onResume()
{
super.onResume();
ListKue.clear();
mListView.setAdapter(adapter_off);
List<Kue> contacts = db.ReadKue();
for (Kue cn : contacts)
{
Kue judulModel = new Kue();
judulModel.set_id(cn.get_id());
judulModel.set_namakue(cn.get_namakue());
judulModel.set_harga(cn.get_harga());
ListKue.add(judulModel);
if ((ListKue.isEmpty()))
Toast.makeText(MainRead.this, "Tidak ada
data", Toast.LENGTH_SHORT).show();
else
{
}
}
}
}
Tanggal :
VI-29
package com.example.tugas5crud;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class MainUpdel extends AppCompatActivity
{
private MyDatabase db;
private String Sid, Snamakue, Sharga;
private EditText Enamakue, Eharga;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_updel);
db = new MyDatabase(this);
Intent i = this.getIntent();
Sid = i.getStringExtra("Iid");
Snamakue = i.getStringExtra("Inamakue");
Sharga = i.getStringExtra("Iharga");
Enamakue = (EditText)
findViewById(R.id.updel_namakue);
Eharga = (EditText) findViewById(R.id.updel_harga);
Enamakue.setText(Snamakue);
Eharga.setText(Sharga);
Button btnUpdate = (Button)
findViewById(R.id.btn_up);
btnUpdate.setOnClickListener(new
View.OnClickListener()
{
@Override
public void onClick(View view)
{
Snamakue =
String.valueOf(Enamakue.getText());
Sharga = String.valueOf(Eharga.getText());
if (Snamakue.equals("")){
Enamakue.requestFocus();
Toast.makeText(MainUpdel.this,
"Silahkan isi namakue", Toast.LENGTH_SHORT).show();
} else if (Sharga.equals(""))
{
Eharga.requestFocus();
Toast.makeText(MainUpdel.this,
"Silahkan isi harga", Toast.LENGTH_SHORT).show();
}
else
{
Tanggal :
VI-30
Tanggal :
VI-31
Tanggal :
VI-32
VI.5 Kesimpulan
1. Mahasiswa dapat memahami konsep dasar SQLITE DATABASE
2. Mahasiswa dapat mengimplementasikan pembuatan SQLITE pada
android
3. Mahasiswa dapat membuat crud dengan SQLITE sederhana pada android
studio
Tanggal :
VII-1
BAB VII
REST API
JumlahPertemuan : 2 x 60 menit
Tanggal :
VII-2
Tanggal :
VII-3
Tanggal :
VII-4
B. Volley
Volley merupakan produk yang diperkenalkan oleh Google
untuk mempermudah pertukaran data tanpa harus membuat deretan
kode yang sangat panjang. Secara default volley menggunakan
metode singkronisasi jadi anda tidak perlu membuat sebuah method
atau fungsi yang menggunakan class asynctask.
Melakukan sebuah request queuing and prioritization
(Mengutamakan prioritas dalam sebuah antrian)
VII.2 Langkah – Langkah Praktikum
1. Buka aplikasi android studio 3.5
2. Tulis Source Code
3. Buka Comfile pada Android Studio 3.5
VII.3 Tugas 1 : Membuat tampilan Movie List
Menambahkan source code gradle pada module app :
//pada android
buildConfigField "String", "MovieAPIKey",
"\"dca0565e8c3610b0b593d9c8ad1d2c7e\""
buildConfigField "String", "MovieBaseURL",
"\"http://api.themoviedb.org/3/\""
buildConfigField "String", "MovieImgURL",
"\"http://image.tmdb.org/t/p/\""
}
//pada depensice
implementation 'androidx.recyclerview:recyclerview:1.0.0'
implementation 'androidx.cardview:cardview:1.0.0'
//Retrofit, gson
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.squareup.retrofit2:retrofit:2.6.0'
implementation 'com.squareup.retrofit2:converter-
gson:2.6.0'
implementation 'androidx.lifecycle:lifecycle-
extensions:2.1.0'
annotationProcessor 'androidx.lifecycle:lifecycle-
compiler:2.1.0'
// Glide nampilin image
implementation 'com.github.bumptech.glide:glide:4.10.0'
annotationProcessor
'com.github.bumptech.glide:compiler:4.10.0'
Tanggal :
VII-5
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/swipe"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvMovie"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginStart="2dp"
android:layout_marginTop="4dp"
android:layout_marginEnd="2dp"
android:layout_marginBottom="4dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:listitem="@layout/movie_list_item" />
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
Tanggal :
VII-6
app:cardCornerRadius="6dp"
android:layout_margin="2dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/ivPoster"
android:layout_width="0dp"
android:layout_height="275dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:scaleType="fitXY"
android:src="@drawable/ic_local_movies_black_24dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tvMovieTitle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginEnd="32dp"
android:ellipsize="end"
android:maxLines="1"
android:textSize="14sp"
app:layout_constraintEnd_toEndOf="@+id/ivShare"
app:layout_constraintStart_toStartOf="@+id/ivPoster"
app:layout_constraintTop_toBottomOf="@+id/ivPoster"
tools:text="Judul Film" />
<TextView
android:id="@+id/tvReleaseDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:maxLines="4"
android:textSize="12sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="@+id/tvMovieTitle"
app:layout_constraintTop_toBottomOf="@id/tvMovieTitle"
tools:text="15 Oktober 2019" />
<ImageView
android:id="@+id/ivShare"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
app:layout_constraintEnd_toEndOf="@+id/ivPoster"
app:layout_constraintTop_toBottomOf="@+id/ivPoster"
Nama Aslab Asistensi TTD :
Tanggal :
VII-7
app:srcCompat="@drawable/ic_share_black_24dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
Source code network_security_config.xml :
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
</network-security-config>
private ApiClient() {
retrofit = new Retrofit.Builder()
.baseUrl(BuildConfig.MovieBaseURL)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
public static synchronized ApiClient getInstance(){
if(mInstance==null){
mInstance = new ApiClient();
}
return mInstance;
}
public Api getApi(){
return retrofit.create(Api.class);
}
}
Tanggal :
VII-8
//https://api.themoviedb.org/3/discover/movie?api_key=api_ke
y&language=en-US
@GET("discover/movie")
Call<MovieList> getMovieList(@Query("api_key") String
key, @Query("language") String lang);
}
Source code MovieAdapter.java :
package com.example.mymovie.adapter;
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.example.mymovie.BuildConfig;
import com.example.mymovie.R;
import com.example.mymovie.model.Movie;
import java.util.List;
public class MovieAdapter extends
RecyclerView.Adapter<MovieAdapter.MovieViewHolder>
{
private Context mCtx;
private List<Movie> movieList;
public MovieAdapter(Context mCtx, List<Movie> movieList)
{
this.mCtx = mCtx;
this.movieList = movieList;
}
public List<Movie> getMovieList() {
return movieList;
}
public void setMovieList(List<Movie> movieList) {
this.movieList = movieList;
}
@NonNull
@Override
public MovieViewHolder onCreateViewHolder(@NonNull
ViewGroup parent, int viewType) {
View view =
LayoutInflater.from(mCtx).inflate(R.layout.movie_list_item,
parent, false);
return new MovieViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MovieViewHolder
holder, int position) {
Movie mov = getMovieList().get(position);
Nama Aslab Asistensi TTD :
Tanggal :
VII-9
Glide.with(mCtx).load(BuildConfig.MovieImgURL +
"w185/" + mov.getPosterPath()).into(holder.ivPoster);
holder.tvTitle.setText(mov.getTitle());
holder.tvRelease.setText(mov.getReleaseDate());
}
@Override
public int getItemCount() {
return movieList.size();
}
public class MovieViewHolder extends
RecyclerView.ViewHolder implements View.OnClickListener {
ImageView ivPoster, ivShare;
TextView tvTitle, tvRelease;
public MovieViewHolder(@NonNull View itemView) {
super(itemView);
ivPoster = itemView.findViewById(R.id.ivPoster);
tvTitle =
itemView.findViewById(R.id.tvMovieTitle);
tvRelease =
itemView.findViewById(R.id.tvReleaseDate);
ivShare = itemView.findViewById(R.id.ivShare);
ivShare.setOnClickListener(this);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
int pos = getAdapterPosition();
Movie mov = getMovieList().get(pos);
if (view.getId() == R.id.ivShare) {
Intent Intent;
Intent = new Intent(Intent.ACTION_SEND);
Intent.setType("text/plain");
Intent.putExtra(Intent.EXTRA_SUBJECT,
mov.getTitle());
Intent.putExtra(Intent.EXTRA_TEXT,
mov.getOverview());
mCtx.startActivity(Intent.createChooser(Intent, null));
} else {
Toast.makeText(mCtx, "Share Film " +
getMovieList().get(pos).getTitle(),
Toast.LENGTH_SHORT).show();
}
}
}}
Tanggal :
VII-10
import com.example.mymovie.BuildConfig;
import com.example.mymovie.api.ApiClient;
import com.example.mymovie.model.MovieList;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
Tanggal :
VII-11
Hasil Tampilan :
Tanggal :
VII-12
Tanggal :
VII-13
Gambar 7.2 adalah tampilan home, yaitu tampilan awal atau halaman
utama dari aplikasi pendaftaran mahasiswa. Pada tampilan home
mempunyai 3 menu yaitu pendaftaran, login, dan about.
Pada menu pertama yaitu pendaftaran mempunyai fungsi melakukan
pendaftaran mahasiswa dan sekaligus melakukan pendaftaran akun, pada
menu kedua yaitu login berfungsi untuk login ketika sudah selesai
melakukan pendaftaran, dan yang terakhir menu about berisikan data
identitas kelompok.
Gambar 7.3 adalah tampilan dari form pendaftaran yang berisikan
isian biodata calon mahasiswa, setelah calon mahasiswa selesai melakukan
pengisian biodata maka secara otomatis form akan berpindah ke form
login..
Tanggal :
VII-14
Tanggal :
VIII-1
BAB VIII
PROJECT
JumlahPertemuan : 2 x 60 menit
Tanggal :
VIII-2
Tanggal :
VIII-3
Tanggal :
VIII-4
android:layout_marginRight="16dp"
android:layout_marginBottom="268dp"
android:background="@color/bg_btn"
android:text="LOGIN"
android:textColor="@android:color/white"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent" />
<Button
android:id="@+id/btReg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginTop="16dp"
android:layout_marginRight="16dp"
android:background="@color/bg_btn"
android:text="REGISTER"
android:textColor="@android:color/white"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btLogin"
app:layout_constraintVertical_bias="0.0" />
</androidx.constraintlayout.widget.ConstraintLayout>
Tanggal :
VIII-5
setContentView(R.layout.activity_login);
initView();
login();
}
private void login() {
btn_login.setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View view) {
//menampung imputan user
final String emailUser =
edtEmail.getText().toString().trim();
final String passwordUser =
edtPassword.getText().toString().trim();
mAuth.signInWithEmailAndPassword(emailUser, passwordUser)
.addOnCompleteListener(Login.this, new
OnCompleteListener<AuthResult>() {
@Override
public void
onComplete(@NonNull Task<AuthResult> task) {
// ketika gagal locin
maka akan do something
if
(!task.isSuccessful()) {
Toast.makeText(Login.this,
"Gagal
login karena user tidak ada!! Coba lagi ",
Toast.LENGTH_LONG).show();
} else {
Tanggal :
VIII-6
bundle.putString("email", emailUser);
bundle.putString("pass", passwordUser);
startActivity(new
Intent(Login.this, Home.class)
.putExtra("emailpass", bundle));
finish();
}
}
});
}
}
});
}
private void initView() {
edtEmail = findViewById(R.id.edt_email);
edtPassword = findViewById(R.id.edt_password);
btn_login = findViewById(R.id.btn_login);
mAuth = FirebaseAuth.getInstance();
}
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/profile_image"
android:layout_width="195dp"
android:layout_height="166dp"
android:layout_marginBottom="196dp"
android:src="@drawable/itn"
app:layout_constraintBottom_toTopOf="@+id/btn_login"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<EditText
Tanggal :
VIII-7
android:id="@+id/edt_email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:gravity="center"
android:hint="EMAIL"
android:importantForAutofill="no"
android:inputType="textEmailAddress"
android:textColorHint="#FFFF"
android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@+id/edt_password"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_chainStyle="packed"
tools:targetApi="o" />
<EditText
android:id="@+id/edt_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:gravity="center"
android:hint="PASSWORD"
android:importantForAutofill="no"
android:inputType="textPassword"
android:textColorHint="#FFFF"
android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@+id/btn_login"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/edt_email"
tools:targetApi="o" />
<Button
android:id="@+id/btn_login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginTop="16dp"
android:layout_marginRight="16dp"
android:background="@color/bg_btn"
android:text="LOGIN"
android:textColor="@android:color/white"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/edt_password" />
</androidx.constraintlayout.widget.ConstraintLayout>
Tanggal :
VIII-8
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import
com.example.pendaftaranmahasiwa.Database.pro_crud.MainCreat
e;
//untuk toolbar
Toolbar toolbar = findViewById(R.id.toolbar);
//Inisialisasi dan Implementasi id Toolbar
setSupportActionBar(toolbar); // Memasang Toolbar
pada Aplikasi
getSupportActionBar().setDisplayShowTitleEnabled(false);
//untuk menghilangkan tulisan SlimTi
//untuk kembali
toolbar.setNavigationIcon(getResources().getDrawable(R.draw
able.ic_back));
toolbar.setNavigationOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View view) {
onBackPressed();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//Memanggil/Memasang menu item pada toolbar dari
layout menu_bar.xml
MenuInflater inflater = getMenuInflater();
Tanggal :
VIII-9
inflater.inflate(R.menu.menu, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.about :
//Kode disini akan di eksekusi saat tombol
menu di klik
Toast.makeText(this, "About",
Toast.LENGTH_SHORT).show();
Intent a = new Intent(Home.this,
Halaman_kelompok.class);
startActivity(a);
break;
}
return super.onOptionsItemSelected(item);
}
Tanggal :
VIII-10
android:layout_marginBottom="96dp"
android:src="@drawable/itn"
app:layout_constraintBottom_toTopOf="@+id/bt_home"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<Button
android:id="@+id/bt_home"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginTop="16dp"
android:layout_marginRight="16dp"
android:layout_marginBottom="268dp"
android:background="@color/bg_btn"
android:text="HOME"
android:textColor="@android:color/white"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent" />
<Button
android:onClick="daftar"
android:id="@+id/bt_daftar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginTop="16dp"
android:layout_marginRight="16dp"
android:background="@color/bg_btn"
android:text="Daftar"
android:textColor="@android:color/white"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/bt_home"
app:layout_constraintVertical_bias="0.0" />
<Button
android:id="@+id/bt_about"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginTop="16dp"
android:layout_marginRight="16dp"
android:background="@color/bg_btn"
android:text="LOGOUT"
android:textColor="@android:color/white"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/bt_daftar"
app:layout_constraintVertical_bias="0.0" />
Tanggal :
VIII-11
</androidx.constraintlayout.widget.ConstraintLayout>
/**
* Cek apakah ada user yang sudah login
*/
btn_reg = (Button) findViewById(R.id.btn_reg);
etEmail = (EditText) findViewById(R.id.et_email);
etPassword = (EditText)
findViewById(R.id.et_password);
btn_reg.setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View view) {
/**
Tanggal :
VIII-12
checkLogin();
}
mAuth.createUserWithEmailAndPassword(email,
password)
.addOnCompleteListener(this, new
OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull
Task<AuthResult> task) {
Log.d(TAG,
"createUserWithEmail:onComplete:" + task.isSuccessful());
/**
* Jika sign in gagal, tampilkan
pesan ke user. Jika sign in sukses
* maka auth state listener akan
dipanggil dan logic untuk menghandle
* signed in user bisa dihandle di
listener.
*/
if (!task.isSuccessful()) {
task.getException().printStackTrace();
Toast.makeText(Register.this,
"Proses Pendaftaran Gagal",
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(Register.this,
"Proses Pendaftaran Berhasil\n" +
"Harap Login",
Toast.LENGTH_SHORT).show();
}
// rest of code
}
});
Tanggal :
VIII-13
password){
mAuth.signInWithEmailAndPassword(email, password)
.addOnCompleteListener(this, new
OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull
Task<AuthResult> task) {
Log.d(TAG,
"signInWithEmail:onComplete:" + task.isSuccessful());
/**
* Jika sign in gagal, tampilkan
pesan ke user. Jika sign in sukses
* maka auth state listener akan
dipanggil dan logic untuk menghandle
* signed in user bisa dihandle di
listener.
*/
if (!task.isSuccessful()) {
Log.w(TAG,
"signInWithEmail:failed", task.getException());
Toast.makeText(Register.this,
"Proses Login Gagal\n",
Toast.LENGTH_SHORT).show();
}
// ... rest of code
}
});
}
@Override
protected void onStart() {
super.onStart();
}
Tanggal :
VIII-14
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onStop() {
super.onStop();
if (mStateListener != null) {
mAuth.removeAuthStateListener(mStateListener);
}
}
}
Tanggal :
VIII-15
tools:targetApi="o" />
<EditText
android:id="@+id/et_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:gravity="center"
android:hint="PASSWORD"
android:importantForAutofill="no"
android:inputType="textPassword"
android:textColorHint="#FFFF"
android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@+id/btn_reg"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/et_email"
tools:targetApi="o" />
<Button
android:id="@+id/btn_reg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginTop="16dp"
android:layout_marginRight="16dp"
android:background="@color/bg_btn"
android:text="REGISTER"
android:textColor="@android:color/white"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/et_password" />
</androidx.constraintlayout.widget.ConstraintLayout>
Tanggal :
VIII-16
Tanggal :
VIII-17
@NonNull
@Override
public KelompokAdapter.KelompokViewHolder
onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
{
LayoutInflater layoutInflater =
LayoutInflater.from(parent.getContext());
View view =
layoutInflater.inflate(R.layout.item_kelompok, parent,
false);
return new KelompokViewHolder(view);
}
public void onBindViewHolder(KelompokViewHolder holder,
int position) {
holder.txtNama.setText(dataList.get(position).getNama());
holder.txtNim.setText(dataList.get(position).getNim());
holder.gmbrData.setImageDrawable(dataList.get(position).get
Gambar());
}
@Override
public int getItemCount() {
return (dataList != null) ? dataList.size() : 0;
}
public class KelompokViewHolder extends
RecyclerView.ViewHolder{
private TextView txtNama, txtNim;
private ImageView gmbrData;
public KelompokViewHolder(View itemView) {
super(itemView);
txtNama = (TextView)
itemView.findViewById(R.id.tv_nama);
txtNim = (TextView)
itemView.findViewById(R.id.tv_nim);
gmbrData = (ImageView)
itemView.findViewById(R.id.img_data);
}
}
}
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
Nama Aslab Asistensi TTD :
Tanggal :
VIII-18
tools:context=".Halaman_kelompok">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#009B6262">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
android:fitsSystemWindows="true"
android:minHeight="?attr/actionBarSize"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:titleTextColor="@android:color/white">
<TextView
android:id="@+id/toolbar_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Tentang Kelompok"
android:textColor="#FFFDFD"
android:textSize="25sp"
tools:layout_editor_absoluteX="176dp"
tools:layout_editor_absoluteY="18dp" />
</androidx.appcompat.widget.Toolbar>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_width="359dp"
android:layout_height="413dp"
android:layout_marginEnd="1dp"
android:clickable="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/toolbar">
</androidx.recyclerview.widget.RecyclerView>
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
Tanggal :
VIII-19
Tanggal :
VIII-20
if (cursor.moveToFirst()) {
do {
Mahasiswa mdKontak = new Mahasiswa();
mdKontak.set_nama(cursor.getString(0));
mdKontak.set_ttl(cursor.getString(1));
mdKontak.set_agama(cursor.getString(2));
mdKontak.set_gender(cursor.getString(3));
mdKontak.set_alamat(cursor.getString(4));
mdKontak.set_ortu(cursor.getString(5));
judulModelList.add(mdKontak);
} while (cursor.moveToNext());
}
db.close();
return judulModelList;
}
public int UpdateMahasiswa (Mahasiswa mdNotif) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(tb_mhsiswa_nama, mdNotif.get_nama());
values.put(tb_mhsiswa_ttl, mdNotif.get_ttl());
values.put(tb_mhsiswa_agama, mdNotif.get_agama());
values.put(tb_mhsiswa_gender,
mdNotif.get_gender());
values.put(tb_mhsiswa_alamat,
mdNotif.get_alamat());
values.put(tb_mhsiswa_ortu, mdNotif.get_ortu());
return db.update(tb_mahasiswa, values,
tb_mhsiswa_nama + " = ?",
new String[] {
String.valueOf(mdNotif.get_nama())});
}
public void DeleteMahasiswa (Mahasiswa mdNotif) {
SQLiteDatabase db = this.getWritableDatabase();
db.delete(tb_mahasiswa, tb_mhsiswa_nama+ " = ?",
new
String[]{String.valueOf(mdNotif.get_nama())});
db.close();
}
}
Tanggal :
VIII-21
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null)
convertView =
inflater.inflate(R.layout.custom_list, null);
TextView nama = (TextView)
convertView.findViewById(R.id.text_nama);
TextView ttl = (TextView)
convertView.findViewById(R.id.text_ttl);
TextView agama = (TextView)
convertView.findViewById(R.id.text_agama);
TextView gender = (TextView)
convertView.findViewById(R.id.text_gender);
TextView alamat = (TextView)
convertView.findViewById(R.id.text_alamat);
TextView ortu = (TextView)
convertView.findViewById(R.id.text_ortu);
ImageView imageView = (ImageView)
convertView.findViewById(R.id.iconid);
Mahasiswa m = movieItems.get(position);
nama.setText("Nama : "+ m.get_nama());
ttl.setText("TTL : "+ m.get_ttl());
agama.setText("Agama : "+ m.get_agama());
gender.setText("Gender : "+ m.get_gender());
alamat.setText("Alamat : "+ m.get_alamat());
ortu.setText("Ortu : "+ m.get_ortu());
return convertView;
}
}
Tanggal :
VIII-22
Tanggal :
VIII-23
}
}
Tanggal :
VIII-24
Toast.LENGTH_SHORT).show();
} else if (Sttl.equals("")){
Ettl.requestFocus();
Toast.makeText(MainCreate.this,
"Silahkan isi Data Lahir",
Toast.LENGTH_SHORT).show();
Eagama.requestFocus();
Toast.makeText(MainCreate.this,
"Silahkan isi Data Agama",
Toast.LENGTH_SHORT).show();
Egender.requestFocus();
Toast.makeText(MainCreate.this,
"Silahkan isi Data Gender",
Toast.LENGTH_SHORT).show();
Ealamat.requestFocus();
Toast.makeText(MainCreate.this,
"Silahkan isi Data Alamat",
Toast.LENGTH_SHORT).show();
Eortu.requestFocus();
Toast.makeText(MainCreate.this,
"Silahkan isi Data Orang Tua",
Toast.LENGTH_SHORT).show();
} else {
Enama.setText("");Enama.setText("");
Toast.makeText(MainCreate.this, "Data
telah ditambah",
Toast.LENGTH_SHORT).show();
Ettl.setText("");Enama.setText("");
Toast.makeText(MainCreate.this, "Data
telah ditambah",
Toast.LENGTH_SHORT).show();
Eagama.setText("");Enama.setText("");
Toast.makeText(MainCreate.this, "Data
telah ditambah",
Toast.LENGTH_SHORT).show();
Egender.setText("");Enama.setText("");
Toast.makeText(MainCreate.this, "Data
telah ditambah",
Toast.LENGTH_SHORT).show();
Ealamat.setText("");Enama.setText("");
Toast.makeText(MainCreate.this, "Data
telah ditambah",
Toast.LENGTH_SHORT).show();
Eortu.setText("");Enama.setText("");
Toast.makeText(MainCreate.this, "Data
telah ditambah",
Toast.LENGTH_SHORT).show();
db.CreateMahasiswa(new Mahasiswa(Snama,
Sttl, Sagama, Sgender, Salamat, Sortu));
Intent a = new Intent(MainCreate.this,
MainCreate.class);
startActivity(a);
}
}
Tanggal :
VIII-25
});
}
public void read(View view) {
Intent read = new Intent(MainCreate.this,
MainRead.class);
startActivity(read);
}
}
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:gravity="center"
android:orientation="vertical"
tools:context=".Database.pro_crud.MainCreate">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="FORM PENDAFTARAN" />
<EditText
android:id="@+id/create_nama"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:hint="Nama" />
<EditText
android:id="@+id/create_ttl"
android:hint="TTL"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<EditText
android:id="@+id/create_agama"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:hint="Agama" />
<EditText
android:id="@+id/create_gender"
android:hint="Gender"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<EditText
Nama Aslab Asistensi TTD :
Tanggal :
VIII-26
android:id="@+id/create_alamat"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:hint="Alamat" />
<EditText
android:id="@+id/create_ortu"
android:hint="Ortu"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/create_btn"
android:layout_marginTop="20dp"
android:text="Tambah Data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/create_color"/>
<Button
android:onClick="read"
android:id="@+id/read_btn"
android:layout_marginTop="20dp"
android:text="Tampilkan Data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/create_color"/>
</LinearLayout>
Tanggal :
VIII-27
Tanggal :
VIII-28
Object o = mListView.getItemAtPosition(i);
Mahasiswa obj_itemDetails = (Mahasiswa)o;
String Snama = obj_itemDetails.get_nama();
String Sttl = obj_itemDetails.get_ttl();
String Sagama = obj_itemDetails.get_agama();
String Sgender = obj_itemDetails.get_gender();
String Salamat = obj_itemDetails.get_alamat();
String Sortu = obj_itemDetails.get_ortu();
Intent goUpdel = new Intent(MainRead.this,
MainUpDel.class);
goUpdel.putExtra("Inama", Snama);
goUpdel.putExtra("Ittl", Sttl);
goUpdel.putExtra("Iagama", Sagama);
goUpdel.putExtra("Igender", Sgender);
goUpdel.putExtra("Ialamat", Salamat);
goUpdel.putExtra("Iortu", Sortu);
startActivity(goUpdel);
}
@Override
protected void onResume() {
super.onResume();ListMahasiswa.clear();
mListView.setAdapter(adapter_off);
List<Mahasiswa> contacts = db.ReadMahasiswa();
for (Mahasiswa cn : contacts) {
Mahasiswa judulModel = new Mahasiswa();
judulModel.set_nama(cn.get_nama());
judulModel.set_ttl(cn.get_ttl());
judulModel.set_agama(cn.get_agama());
judulModel.set_gender(cn.get_gender());
judulModel.set_alamat(cn.get_alamat());
judulModel.set_ortu(cn.get_ortu());
ListMahasiswa.add(judulModel);
if ((ListMahasiswa.isEmpty()))
Toast.makeText(MainRead.this, "Tidak ada
data",
Toast.LENGTH_SHORT).show();
else {
}
}
}
}
Tanggal :
VIII-29
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context=".Database.pro_crud.MainRead">
<ListView
android:id="@+id/list_mahasiswa"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
Tanggal :
VIII-30
Eagama = (EditText)
findViewById(R.id.create_agama);
Egender = (EditText)
findViewById(R.id.create_gender);
Ealamat = (EditText)
findViewById(R.id.create_alamat);
Eortu = (EditText) findViewById(R.id.create_ortu);
Button btnUpdate = (Button)
findViewById(R.id.btn_up);
btnUpdate.setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View view) {
Snama = String.valueOf(Enama.getText());
Salamat =
String.valueOf(Ealamat.getText());
Sortu = String.valueOf(Eortu.getText());
if (Snama.equals("")){
Enama.requestFocus();
Toast.makeText(MainUpDel.this,
"Silahkan isi nama",
Toast.LENGTH_SHORT).show();
} else if (Sttl.equals("")){
Ealamat.requestFocus();
Toast.makeText(MainUpDel.this,
"Silahkan isi kelas",
Toast.LENGTH_SHORT).show();
Eortu.requestFocus();
Toast.makeText(MainUpDel.this,
"Silahkan isi kelas",
Toast.LENGTH_SHORT).show();
} else {
db.UpdateMahasiswa(new Mahasiswa(Snama,
Sttl, Sagama, Sgender, Salamat, Sortu));
Toast.makeText(MainUpDel.this, "Data
telah diupdate",
Toast.LENGTH_SHORT).show();
finish();
}
}
});
Button btnDelete = (Button)
findViewById(R.id.btn_del);
btnDelete.setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View view) {
db.DeleteMahasiswa(new Mahasiswa(Snama,
Sttl, Sagama, Sgender, Salamat, Sortu));
Toast.makeText(MainUpDel.this, "Data telah
dihapus",
Toast.LENGTH_SHORT).show();
finish();}
});
Tanggal :
VIII-31
}
}
Tanggal :
VIII-32
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:background="@color/delete_color"/>
</LinearLayout>
Hasil Tampilan :
Tanggal :
VIII-33
Tanggal :
VIII-34
Tanggal :
VIII-35
Tanggal :
VIII-36
VIII.4 Kesimpulan
1. Aplikasi ini menggunakan element Recycler View, Card View, List
View, Custom Toolbar, dan Circle Image View.
2. Aplikasi ini menggunakan penyimpanan data dengan SQLite.
3. Aplikasi ini menggunakan penyimpanan data login dengan Firebase.
4. Aplikasi ini berguna selain untuk memberikan informasi tentang data
pendaftaran, tetapi juga untuk melakukan CRUD pada data pendaftaran
mahasiswa
Tanggal :
IX-1
BAB IX
KESIMPULAN
1. Intent berfungsi untuk melakukan perpindahan activity dan dapat membawa atau
mengirimkan data serta untuk mengambil gambar dari smartphone, dan juga
intent di bagi menjadi dua jenis yaitu implisit dan explisit.
2. Fragment merupakan fungsi yang dimana membuat tampilan aplikasi lebih
efisien, karena dengan menggunakan fragment pemprogram tidak perlu banyak
menggunakan activity untuk membuat tampilan aplikasinya.
3. Navigation Drawer merupakan sebuah navigasi yang memudahkan user untuk
melihat menu yang ada di aplikasi.
4. Action Bar merupakan sebuah tampilan yang pasti ada di setiap aplikasi android.
Yang dimana posisi dari action bar ini berada di header untuk menampilkan
judul dari aplikasi.
5. RecyclerView merupakan list data yang tersusun secara berurutan kebawah mau
pun kesamping. Recyclerview ini juga merupakan sebuah tumpukan data yang
banyak untuk menampilkan banyak data.
6. Background Proses merupakan sebuah servis yang berjalan di belakang layar
yang melakukan setiap proses tidak diketahui oleh user. Hasil dari proses ini
biasanya berupa notifikasi dari aplikasi.
7. SQLite Database merupakan database internal dimiliki oleh android studio
yang bersifat offline. Untuk memori penampungan yang dimiliki oleh database
ini terbatas tergantung dari smartphone yang digunakan.
8. Rest Api dibagi menjadi dua jenis yaitu cloud dan localhost. Untuk API cloud
biasanya terdapat di website, dan untuk localhost biasanya menggunakan
webservis dan harus membuat file json.
9. Retrofit merupakan library android yang dibuat oleh Square yang digunakan
sebagai REST Client pada Android, yang pasti akan memudahkan kita.
10. Volley merupakan produk yang diperkenalkan oleh Google untuk mempermudah
pertukaran data tanpa harus membuat deretan kode yang sangat panjan
Tanggal :
IX-2
DAFTAR PUSTAKA
Tulisan Ndeso. 2018. Pengertian Android Studio dan Berbagai Macam Bagiannya.
https://medium.com/@tulisanndeso/pengertian-android-studio navigation-bar.html
(9 November 2019)
Hanamaze. 2016. Membuat Tombol Back Pada Action Bar Di Android Studio.
https:/www.kucingtekno.com/2016/11/membuat-tombol-back-pada-navigation-
bar.html (12 November 2019)
Mgbemena, Chike. 2018. Cara Membuat Kode Navigasi Drawer untuk Sebuah
Aplikasi Android. https:/code.tutsplus.com/id/tutorials/how-to-code-a-navigation-
drawer-in-an-app-cms-32063 (12 November 2019)
Elfrida, Heddiaty D. 2016. Tips Mengirim Data Antar Activity di Android Studio.
https:/www.dicoding.com/blog/tips-mengirim-data-antar-activity-di-android-studio/
(10 Desember 2019)
Tanggal :