Pada tutorial kali ini kita akan membuat aplikasi CRUD (Create, Read, Update, Delete) Android menggunakan database MySQL, dimana database MySql nya terletak pada PC/Laptop yang kita jadikan seolah-olah sebagai servernya, sedangkan aplikasi androidnya ada pada HP sebagai clientnya.
Untuk menunjang tutorial kali ini, kita harus memiliki sedikit pemahaman pemrograman PHP dan memahami konsep dari database, terutamanya MySQL. terutama database MySQL.
Untuk mengambil data dari MySQL diperlukan sebuah file PHP yang disebut dengan API Web Services, file PHP tersebur nantinya akan mengubah data dalam bentuk JSON.
JSON (JavaScript Object Notation) merupakan sebuah format yang digunakan untuk menyimpan, membaca, serta menukar informasi dari web server sehingga dapat dibaca oleh para pengguna.
Sebuah objek JSON merupakan kumpulan dari pasangan key dan value yang diawali dengan tanda “{” dan diakhiri dengan tanda “}”. Biasanya, file JSON berisikan teks dan file berekstensi .json. JSON ini berbeda dengan XML namun keduanya memiliki fungsi yang serupa.
JSON ini sendiri terdiri dari dua struktur atau bagian. Yang pertama adalah kumpulan value yang saling berpasangan contohnya seperti object. Struktur kedua adalah kumpulan value yang berurutan seperti misalnya array. Selain itu, JSON dapat digunakan oleh bahasa pemrograman lain seperti PHP, Python, C++, dan Ruby.
Untuk pembuatan aplikasi CRUD ini kita akan membagi pekerjaan menjadi 3 bagian, yaitu :
- Pembuatan database pada MySQL.
- Pembuatan File PHP.
- Pembuatan Project Android.
Pada tutorial ini kita akan membuat membuat aplikasi sekolah untuk mengelola data siswa. Berikut tahapan-tahapan pembuatan aplikasinya :
1. Pembuatan Database MySQL
Buat database dengan nama datasekolah dengan nama table tbl_siswa dan struktur tablenya sendiri seperti berikut:

Selanjutnya silahkan isi data masing-masing table dengan data yang diperlukan utnuk keperluan uji coba.
2. Pembuatan File PHP
Pembuatan file PHP di sini digunakan sebagai web service untuk parsing data aplikasi Android. File PHP yang kita buat disimpan dalam folder project di dalam htdocs, untuk itu sekarang kita buat folder project di dalam htdocs misal dengan nama datasekolah. Pada tahap pembuatan File PHP ini, ada beberapa File yang harus kita buat, berikut ini file php yang perlu kita buat :
a. Buat file koneksi.php
Pertama kita perlu untuk membuat koneksi dengan database, oleh sebab itu kita buat file php dengan nama koneksi.php di dalam folder project datasekolah dan tulis programnya seperti di bawah ini :
<?php
$server = "localhost"; //sesuaikan dengan nama server
$pengguna = "root"; //sesuaikan username
$katakunci = ""; //sesuaikan password
$namadb = "datasekolah"; //sesuaikan nama database
$datakoneksi = mysqli_connect($server, $pengguna, $katakunci, $namadb);
if (mysqli_connect_errno())
{
echo "Gagal terhubung MySQL: " . mysqli_connect_error();
}
?>
b. Buat file siswa_tambah.php
Setelah kita membuat koneksi dengan database, selanjutnya kita buat folder dengan nama siswa di dalam folder project datasekolah dan buat file untuk input atau CREATE data siswa dengan nama siswa_tambah.php dengan sintak seperti di bawah ini :
<?php
if($_SERVER['REQUEST_METHOD']=='POST')
{
//Mendapatkan Nilai Variable
$nis = $_POST['nis'];
$namasiswa = $_POST['namasiswa'];
$alamat = $_POST['alamat'];
$jk = $_POST['jk'];
//Pembuatan Syntax SQL
$ambildata = "INSERT INTO tbl_siswa (nis,namasiswa,alamat,jk) VALUES ('$nis','$namasiswa','$alamat','$jk')";
//Import File Koneksi database
require_once('../koneksi.php');
//Eksekusi Query database
if(mysqli_query($datakoneksi,$ambildata))
{
echo 'Berhasil Menambahkan Data Siswa';
}
else
{
echo 'Gagal Menambahkan Data Siswa';
}
mysqli_close($datakoneksi);
}
?>
c. Buat file siswa_tampil.php
Setelah kita membuat file untuk memasukkan data atau Create, maka selanjutnya kita perlu file PHP untuk dapat menampilkan daftar data siswa yang ada di database (READ), oleh sebab itu mari kita buat file php dengan nama siswa_tampil.php di dalam folder siswa dengan sintak seperti di bawah ini :
<?php
//Import File Koneksi Database
require_once('../koneksi.php');
//Membuat SQL Query
$ambildata = "SELECT * FROM tbl_siswa";
//Mendapatkan Hasil
$r = mysqli_query($datakoneksi,$ambildata);
//Membuat Array Kosong
$result = array();
while($row = mysqli_fetch_array($r))
{
//Memasukkan NIS, Nama Siswa, Alamat dan JK kedalam Array Kosong yang telah dibuat
array_push($result,array(
"idsiswa" => $row['idsiswa'],
"nis" => $row['nis'],
"namasiswa" => $row['namasiswa'],
"alamat" => $row['alamat'],
"jk" => $row['jk']
));
}
//Menampilkan Array dalam Format JSON
echo json_encode(array('result'=>$result));
mysqli_close($datakoneksi);
?>
d. Buat file siswa_tampil_detail.php
Selain menampilkan semua data siswa, kita juga perlu untuk menampilkan detail siswa yang kita pilih atau kita select (READ). Oleh sebab itu mari kita buat file php dengan nama siswa_tampil_detail.php demham sintak seperti di bawah ini :
<?php
//Mendapatkan Nilai Dari Variable ID Siswa yang ingin ditampilkan
$idsiswa = $_GET['idsiswa'];
//Importing database
require_once('../koneksi.php');
//Membuat SQL Query dengan siswa yang ditentukan secara spesifik sesuai ID Siswa
$ambildata = "SELECT * FROM tbl_siswa WHERE idsiswa=$idsiswa";
//Mendapatkan Hasil
$r = mysqli_query($datakoneksi,$ambildata);
//Memasukkan Hasil Kedalam Array
$result = array();
$row = mysqli_fetch_array($r);
array_push($result,array(
"idsiswa" =>$row['idsiswa'],
"nis" =>$row['nis'],
"namasiswa" =>$row['namasiswa'],
"alamat" =>$row['alamat'],
"jk" =>$row['jk']
));
//Menampilkan dalam format JSON
echo json_encode(array('result'=>$result));
mysqli_close($datakoneksi);
?>
e. Buat file siswa_edit.php
Selanjutnya kita buat file untuk update data siswa, maka kita buat file php dengan nama siswa_edit.php dengan sintak seperti di bawah ini :
<?php
if($_SERVER['REQUEST_METHOD']=='POST')
{
//MEndapatkan Nilai Dari Variable
$idsiswa = $_POST['idsiswa'];
$nis = $_POST['nis'];
$namasiswa = $_POST['namasiswa'];
$alamat = $_POST['alamat'];
$jk = $_POST['jk'];
//import file koneksi database
require_once('../koneksi.php');
//Membuat SQL Query
$ambildata = "UPDATE tbl_siswa SET nis='$nis', namasiswa='$namasiswa', alamat='$alamat', jk='$jk' WHERE idsiswa = $idsiswa;";
//Meng-update Database
if(mysqli_query($datakoneksi,$ambildata))
{
echo 'Berhasil Update Data Siswa';
}
else
{
echo 'Gagal Update Data Siswa';
}
mysqli_close($datakoneksi);
}
?>
f. Buat file siswa_hapus.php
Yang terakhir kita buat file PHP untuk Delete, selanjutnya kita buat file php dengan nama siswa_hapus.php dengan sintak seperti di bawah ini :
<?php
//Mendapatkan Nilai ID Siswa
$idsiswa = $_GET['idsiswa'];
//Import File Koneksi Database
require_once('../koneksi.php');
//Membuat SQL Query
$ambildata = "DELETE FROM tbl_siswa WHERE idsiswa=$idsiswa;";
//Menghapus Nilai pada Database
if(mysqli_query($datakoneksi,$ambildata))
{
echo 'Berhasil Menghapus Data Siswa';
}
else
{
echo 'Gagal Menghapus Data Siswa';
}
mysqli_close($datakoneksi);
?>
Untuk mengakses di Android kita perlu mengetahui IP dari Komputer kita, agar kita bisa mengetahui berapa IP komputer kita mungkin kita bisa gunakan perintah di CMD dengan perint ipconfig maka akan tampil berapa IP kita seperti contoh berikut ini :

Pada contoh di atas IP yang tertera adalah 172.16.100.58 maka path untuk script kita nanti di Android Studio adalah http://172.16.100.58/datasekolah/siswa/nama_file.php.
Selanjutnya uji coba akses file siswa_tampil.php tersebut dengan alamat http://localhost/datasekolah/siswa/siswa_tampil.php pada komputer/laptop yang dijadikan servernya dan http://172.16.100.58/datasekolah/siswa/siswa_tampil.php pada browser yang ada di HP andorid, jangan lupa untuk mengisi data pada table tbl_siswa, jika berhasil maka akan menampilkan data dari table tbl_siswa tampil seperti berikut :
Dari hasil tersebut terlihat data yang tersimpan dalam table tbl_siswa dalam format array json.
3. Pembuatan Project Pada Android Studio
Silahkan buat project baru pada Android Studio, dicontoh ini menggunakan nama DataSekolah. Jika project baru telah terbuka berikut langkah-langkahnya :
a. Edit file AndroidManifest.xml
Langkah pertama yang perlu kita lakukan yaitu silahkan buka file AndroidManifest.xml dan tambahkan perintah berikut :
<uses-permission android:name="android.permission.INTERNET" />
Perintah di atas digunakan untuk ijin internet meskipun project yang akan kita buat nanti adalah bersifat Local tetap perlu untuk menambahkan perintah tersebut.
Dan tambahkan atribut :
android:usesCleartextTraffic="true"
Sehingga file AndroidManifest.xml menjadi seperti berikut :
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.datasekolah">
<uses-permission android:name="android.permission.INTERNET" />
<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/Theme.DataSekolah"
android:usesCleartextTraffic="true">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
b. Buat file Konfigurasi.java
Sekarang buat Java Class baru di dalam package yang ada dengan nama Konfigurasi.java

dengan sintak seperti berikut :
package com.example.datasekolah;
public class Konfigurasi {
//Dibawah ini merupakan Pengalamatan dimana Lokasi Skrip CRUD PHP disimpan
//Pada tutorial Kali ini, karena kita membuat localhost maka alamatnya tertuju ke IP komputer dimana File PHP tersebut berada
//PENTING! JANGAN LUPA GANTI IP SESUAI DENGAN IP KOMPUTER DIMANA DATA PHP BERADA
//UNTUK SISWA
//UNTUK TAMBAH SISWA
public static final String URL_SISWA_TAMBAH=
"http://192.168.100.8/datasekolah/siswa/siswa_tambah.php";
//UNTUK TAMPIL SISWA
public static final String URL_SISWA_TAMPIL=
"http://192.168.100.8/datasekolah/siswa/siswa_tampil.php";
//UNTUK TAMPIL SISWA DETAIL
public static final String URL_SISWA_TAMPILDETAIL =
"http://192.168.100.8/datasekolah/siswa/siswa_tampil_detail.php?idsiswa=";
//UNTUK EDIT SISWA
public static final String URL_SISWA_EDIT =
"http://192.168.100.8/datasekolah/siswa/siswa_edit.php";
//UNTUK HAPUS SISWA
public static final String URL_SISWA_HAPUS =
"http://192.168.100.8/datasekolah/siswa/siswa_hapus.php?idsiswa=";
//Dibawah ini merupakan Kunci yang akan digunakan untuk mengirim permintaan ke Skrip PHP
//UNTUK SISWA
//Dibawah ini merupakan Kunci yang akan digunakan untuk mengirim permintaan ke Skrip PHP
public static final String KEY_SISWA_IDSISWA = "idsiswa";
public static final String KEY_SISWA_NIS = "nis";
public static final String KEY_SISWA_NAMASISWA = "namasiswa";
public static final String KEY_SISWA_ALAMAT = "alamat"; //alamat itu variabel untuk alamat
public static final String KEY_SISWA_JK = "jk"; //jk itu variabel untuk jk
//JSON Tags
//UNTUK SISWA
public static final String TAG_JSON_ARRAY = "result";
public static final String TAG_IDSISWA = "idsiswa";
public static final String TAG_NIS = "nis";
public static final String TAG_NAMASISWA = "namasiswa";
public static final String TAG_ALAMAT = "alamat";
public static final String TAG_JK = "jk";
//ID SISWA
public static final String SISWA_ID = "siswa_id";
}
Sebagai catatan jangan lupa perhatikan bagian URL (Pemanggilan file PHP yang ada di Server), sesuaikan Dengan IP pada komputer/laptop masing-masing.
c. Edit file RequestHandler.java
Setelah selesai membuat java class Konfigurasi, selanjutnya silahkan buat java class kembali dengan nama RequestHandler.java. Java Class ini kita gunakan untuk menangani permintaan jaringan. Silahkan ikuti kode program untuk java class RequestHandler seperti di bawah ini :
package com.example.datasekolah;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
import javax.net.ssl.HttpsURLConnection;
public class RequestHandler {
//Metode Untuk mengirim httpPostRequest
//Metode ini mengambil 2 Argumen
//Metode Pertama adalah URL dari Skrip yang digunakan untuk mengirimkan permintaan
//Yang lainnya adalah HashMap dengan nilai pasangan nama yang berisi data yang akan dikirim dengan permintaan
public String sendPostRequest(String requestURL, HashMap<String, String> postDataParams) {
//Membuat URL
URL url;
//Objek StringBuilder untuk menyimpan pesan diambil dari server
StringBuilder sb = new StringBuilder();
try {
//Inisialisasi URL
url = new URL(requestURL);
//Membuat Koneksi HttpURLConnection
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//Konfigurasi koneksi
conn.setReadTimeout(15000);
conn.setConnectTimeout(15000);
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);
//Membuat Keluaran Stream
OutputStream os = conn.getOutputStream();
//Menulis Parameter Untuk Permintaan
//Kita menggunakan metode getPostDataString yang didefinisikan di bawah ini
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
writer.write(getPostDataString(postDataParams));
writer.flush();
writer.close();
os.close();
int responseCode = conn.getResponseCode();
if (responseCode == HttpsURLConnection.HTTP_OK) {
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
sb = new StringBuilder();
String response;
//Reading server response
while ((response = br.readLine()) != null){
sb.append(response);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return sb.toString();
}
public String sendGetRequest(String requestURL){
StringBuilder sb =new StringBuilder();
try {
URL url = new URL(requestURL);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream()));
String s;
while((s=bufferedReader.readLine())!=null){
sb.append(s+"\n");
}
}catch(Exception e){
}
return sb.toString();
}
public String sendGetRequestParam(String requestURL, String id){
StringBuilder sb =new StringBuilder();
try {
URL url = new URL(requestURL+id);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream()));
String s;
while((s=bufferedReader.readLine())!=null){
sb.append(s+"\n");
}
}catch(Exception e){
}
return sb.toString();
}
private String getPostDataString(HashMap<String, String> params) throws UnsupportedEncodingException {
StringBuilder result = new StringBuilder();
boolean first = true;
for (Map.Entry<String, String> entry : params.entrySet()) {
if (first)
first = false;
else
result.append("&");
result.append(URLEncoder.encode(entry.getKey(), "UTF-8"));
result.append("=");
result.append(URLEncoder.encode(entry.getValue(), "UTF-8"));
}
return result.toString();
}
}
d. Edit file activity_main.xml dan MainActivity.java
Selanjutnya mari kita ubah tampilan dari activity_main.xml yang telah terbentuk sejak project pertama kali dibangun. Pada file xml ini kita akan gunakan sebagai tampilan menambah data siswa, dengan sintak seperti berikut :
<?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:orientation="vertical"
android:layout_height="match_parent"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="16dp"
android:paddingBottom="16dp"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="NIS" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/editTextNis" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Nama Siswa" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/editTextNamaSiswa" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Alamat" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/editTextAlamat" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="JK" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/editTextJk" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Tambah Siswa"
android:id="@+id/TombolTambah" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Daftar Siswa"
android:id="@+id/TombolTampil" />
</LinearLayout>
Dari kode program xml di atas akan menghasilkan tampilan seperti berikut :

Selanjutnya pada MainActivity.java buat sintak seperti berikut ini :
package com.example.datasekolah;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import java.util.HashMap;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
//Dibawah ini merupakan deklarasi untuk variable yang mendefinisikan view
private EditText TextNis;
private EditText TextNama;
private EditText TextAlamat;
private EditText TextJk;
private Button buttonTambah;
private Button buttonTampil;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Inisialisasi dari View
TextNis = (EditText) findViewById(R.id.editTextNis);
TextNama = (EditText) findViewById(R.id.editTextNamaSiswa);
TextAlamat = (EditText) findViewById(R.id.editTextAlamat);
TextJk = (EditText) findViewById(R.id.editTextJk);
buttonTambah = (Button) findViewById(R.id.TombolTambah);
buttonTampil = (Button) findViewById(R.id.TombolTampil);
//Setting listeners to button
buttonTambah.setOnClickListener(this);
buttonTampil.setOnClickListener(this);
}
//Dibawah ini merupakan fungsi/method untuk Menambahkan Siswa (CREATE)
private void SiswaTambah(){
final String nis = TextNis.getText().toString().trim();
final String namasiswa = TextNama.getText().toString().trim();
final String alamat = TextAlamat.getText().toString().trim();
final String jk = TextJk.getText().toString().trim();
class SiswaTambah extends AsyncTask<Void,Void,String> {
ProgressDialog loading;
@Override
protected void onPreExecute() {
super.onPreExecute();
loading = ProgressDialog.show(MainActivity.this,"Menambahkan...","Tunggu...",false,false);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
loading.dismiss();
Toast.makeText(MainActivity.this,s,Toast.LENGTH_LONG).show();
}
@Override
protected String doInBackground(Void... v) {
HashMap<String,String> params = new HashMap<>();
params.put(Konfigurasi.KEY_SISWA_NIS,nis);
params.put(Konfigurasi.KEY_SISWA_NAMASISWA,namasiswa);
params.put(Konfigurasi.KEY_SISWA_ALAMAT,alamat);
params.put(Konfigurasi.KEY_SISWA_JK,jk);
RequestHandler rh = new RequestHandler();
String res = rh.sendPostRequest(Konfigurasi.URL_SISWA_TAMBAH, params);
return res;
}
}
SiswaTambah st = new SiswaTambah();
st.execute();
}
@Override
public void onClick(View v) {
if(v == buttonTambah){
SiswaTambah();
}
if(v == buttonTampil){
startActivity(new Intent(this,SiswaTampil.class));
}
}
}
e. Buat activity SiswaTampil
Selanjutnya buat empty activity baru dengan nama SiswaTampil
Maka secara otomatis namanya akan menjadi activity_siswa_tampil.xml. File xml ini digunakan untuk menampilkan semua data siswa. Setelah file xml telah terbentuk selanjutnya buat layout dengan code seperti berikut :
<?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:orientation="vertical"
android:layout_height="match_parent"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="16dp"
android:paddingBottom="16dp"
tools:context=".SiswaTampil">
<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/listViewSiswa" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Kembali ke Tambah Siswa"
android:id="@+id/TombolBackToTambah" />
</LinearLayout>
Dari kode program xml di atas akan menghasilkan tampilan seperti berikut :

f. Buat file list_siswa.xml
Karena kita membuat ListView, maka kita perlu untuk membuat lagi satu Layout atau tampilan xml untuk menampilkan ListView tersebut. Silahkan buat file xml misal dengan nama list_siswa.xml dan sintak program seperti di bawah ini :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textListIdSiswa"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ID Siswa" />
<TextView
android:id="@+id/textListNis"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="NIS"/>
<TextView
android:id="@+id/textListNamaSiswa"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Nama"/>
<TextView
android:id="@+id/textListAlamat"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Alamat"/>
<TextView
android:id="@+id/textListJk"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="JK"/>
</LinearLayout>
g. Edit file SiswaTampil.java
Setelah kita membuat file xml activity_siswa_tampil.xml secara langsung file Java Class baru akan terbentuk dengan nama SiswaTampil.java, silahkan buat sintak program seperti di bawah :
package com.example.datasekolah;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.HashMap;
public class SiswaTampil extends AppCompatActivity implements ListView.OnItemClickListener{
//deklarasi variable
private ListView listView;
private String JSON_STRING;
Button BacktoTambah;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_siswa_tampil);
listView = (ListView) findViewById(R.id.listViewSiswa);
listView.setOnItemClickListener(this);
BacktoTambah = findViewById(R.id.TombolBackToTambah);
BacktoTambah.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(SiswaTampil.this,MainActivity.class));
}
});
ambilJSON();
}
private void ambilJSON() {
class GetJSON extends AsyncTask<Void,Void,String> {
ProgressDialog loading;
@Override
protected void onPreExecute() {
super.onPreExecute();
loading = ProgressDialog.show(SiswaTampil.this,"Mengambil Data","Mohon Tunggu...",false,false);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
loading.dismiss();
JSON_STRING = s;
showSiswa();
}
@Override
protected String doInBackground(Void... params) {
RequestHandler rh = new RequestHandler();
String s = rh.sendGetRequest(Konfigurasi.URL_SISWA_TAMPIL);
return s;
}
}
GetJSON gj = new GetJSON();
gj.execute();
}
private void showSiswa() {
JSONObject jsonObject = null;
ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String, String>>();
try {
jsonObject = new JSONObject(JSON_STRING);
JSONArray result = jsonObject.getJSONArray(Konfigurasi.TAG_JSON_ARRAY);
for(int i = 0; i<result.length(); i++){
JSONObject jo = result.getJSONObject(i);
String idsiswa = jo.getString(Konfigurasi.TAG_IDSISWA);
String nis = jo.getString(Konfigurasi.TAG_NIS);
String namasiswa = jo.getString(Konfigurasi.TAG_NAMASISWA);
String alamat = jo.getString(Konfigurasi.TAG_ALAMAT);
String jk = jo.getString(Konfigurasi.TAG_JK);
HashMap<String,String> siswa = new HashMap<>();
siswa.put(Konfigurasi.TAG_IDSISWA,idsiswa);
siswa.put(Konfigurasi.TAG_NIS,nis);
siswa.put(Konfigurasi.TAG_NAMASISWA,namasiswa);
siswa.put(Konfigurasi.TAG_ALAMAT,alamat);
siswa.put(Konfigurasi.TAG_JK,jk);
list.add(siswa);
}
} catch (JSONException e) {
e.printStackTrace();
}
ListAdapter adapter = new SimpleAdapter(SiswaTampil.this, list, R.layout.list_siswa,
new String[]{
Konfigurasi.TAG_IDSISWA,
Konfigurasi.TAG_NIS,
Konfigurasi.TAG_NAMASISWA,
Konfigurasi.TAG_ALAMAT,
Konfigurasi.TAG_JK
},
new int[]{
R.id.textListIdSiswa,
R.id.textListNis,
R.id.textListNamaSiswa,
R.id.textListAlamat,
R.id.textListJk
}
);
listView.setAdapter(adapter);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(this, SiswaTampilDetail.class);
HashMap<String,String> map =(HashMap)parent.getItemAtPosition(position);
String siswa_id = map.get(Konfigurasi.TAG_IDSISWA).toString();
intent.putExtra(Konfigurasi.SISWA_ID,siswa_id);
startActivity(intent);
}
}
h. Buat activity SiswaTampilDetail
Selanjutnya kita buat activity baru untuk menampilkan data siswa detail yang dipilih dengan nama SiswaTampilDetail, dari nama tersebut akan secara otomatis terbentuk nama untuk xml dengan nama activity_siswa_tampil_detail.xml dan selanjutnya salin kode seperti berikut :
<?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:orientation="vertical"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="16dp"
android:paddingBottom="16dp"
tools:context=".SiswaTampilDetail">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ID Siswa" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/editTextIdSiswa"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="NIS" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/editTextNis" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Nama Siswa" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/editTextNamaSiswa" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Alamat" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/editTextAlamat" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="JK" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/editTextJk" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Update Data Siswa"
android:id="@+id/buttonUpdate" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Hapus Data Siswa"
android:id="@+id/buttonDelete" />
</LinearLayout>
Dari kode program di atas akan menghasilkan tampilan seperti berikut :

i. Edit file SiswaTampilDetail.java
Dari file xml yang kita buat sebelumnya akan menghasil file Java Class dengan nama SiswaTampilDetail.java dengan sintak seperti berikut :
package com.example.datasekolah;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.HashMap;
public class SiswaTampilDetail extends AppCompatActivity implements View.OnClickListener{
//Deklarasi variable berdasarkan widget dari view
private EditText TextIdSiswa;
private EditText TextNis;
private EditText TextNama;
private EditText TextAlamat;
private EditText TextJk;
private Button TombolUpdate;
private Button TombolDelete;
private String idsiswa;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_siswa_tampil_detail);
Intent intent = getIntent();
idsiswa = intent.getStringExtra(Konfigurasi.SISWA_ID);
//memanggil widget
TextIdSiswa = (EditText) findViewById(R.id.editTextIdSiswa);
TextNis = (EditText) findViewById(R.id.editTextNis);
TextNama = (EditText) findViewById(R.id.editTextNamaSiswa);
TextAlamat = (EditText) findViewById(R.id.editTextAlamat);
TextJk = (EditText) findViewById(R.id.editTextJk);
TombolUpdate = (Button) findViewById(R.id.buttonUpdate);
TombolDelete = (Button) findViewById(R.id.buttonDelete);
TombolUpdate.setOnClickListener(this);
TombolDelete.setOnClickListener(this);
TextIdSiswa.setText(idsiswa);
ambilSiswa();
}
//METHODE UNTUK MENGAMBIL DATA SISWA
private void ambilSiswa() {
class AmbilSiswa extends AsyncTask<Void,Void,String> {
ProgressDialog loading;
@Override
protected void onPreExecute() {
super.onPreExecute();
loading = ProgressDialog.show(SiswaTampilDetail.this,"Fetching...","Wait...",false,false);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
loading.dismiss();
tampilSiswa(s);
}
@Override
protected String doInBackground(Void... params) {
RequestHandler rh = new RequestHandler();
String s = rh.sendGetRequestParam(Konfigurasi.URL_SISWA_TAMPILDETAIL,idsiswa);
return s;
}
}
AmbilSiswa as = new AmbilSiswa();
as.execute();
}
//METHODE UNTUK MENAMPILKAN DATA SISWA
private void tampilSiswa(String json) {
try {
JSONObject jsonObject = new JSONObject(json);
JSONArray result = jsonObject.getJSONArray(Konfigurasi.TAG_JSON_ARRAY);
JSONObject c = result.getJSONObject(0);
String idsiswa = c.getString(Konfigurasi.TAG_IDSISWA);
String nis = c.getString(Konfigurasi.TAG_NIS);
String namasiswa = c.getString(Konfigurasi.TAG_NAMASISWA);
String alamat = c.getString(Konfigurasi.TAG_ALAMAT);
String jk = c.getString(Konfigurasi.TAG_JK);
TextIdSiswa.setText(idsiswa);
TextIdSiswa.setEnabled(false);
TextNis.setText(nis);
TextNama.setText(namasiswa);
TextAlamat.setText(alamat);
TextJk.setText(jk);
}
catch (JSONException e) {
e.printStackTrace();
}
}
//METHOD AKSI KETIKA TOMBOL DI KLIK
@Override
public void onClick(View v) {
if(v == TombolUpdate){
updateSiswa();
}
if(v == TombolDelete){
confirmDeleteSiswa();
}
}
//METHOD CONFIRM DELETE SISWA
private void confirmDeleteSiswa() {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
alertDialogBuilder.setMessage("Apakah Kamu Yakin Ingin Menghapus Pegawai ini?");
alertDialogBuilder.setPositiveButton("Ya",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
deleteSiswa();
startActivity(new Intent(SiswaTampilDetail.this,SiswaTampil.class));
}
});
alertDialogBuilder.setNegativeButton("Tidak",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
//METHOD DELETE SISWA
private void deleteSiswa() {
class DeleteEmployee extends AsyncTask<Void,Void,String> {
ProgressDialog loading;
@Override
protected void onPreExecute() {
super.onPreExecute();
loading = ProgressDialog.show(SiswaTampilDetail.this, "Updating...", "Tunggu...", false, false);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
loading.dismiss();
Toast.makeText(SiswaTampilDetail.this, s, Toast.LENGTH_LONG).show();
}
@Override
protected String doInBackground(Void... params) {
RequestHandler rh = new RequestHandler();
String s = rh.sendGetRequestParam(Konfigurasi.URL_SISWA_HAPUS, idsiswa);
return s;
}
}
DeleteEmployee de = new DeleteEmployee();
de.execute();
}
//METHOD UPDATE SISWA
private void updateSiswa() {
//ambil data dari widget
final String nis = TextNis.getText().toString().trim();
final String namasiswa = TextNama.getText().toString().trim();
final String alamat = TextAlamat.getText().toString().trim();
final String jk = TextJk.getText().toString().trim();
class UpdateSiswa extends AsyncTask<Void,Void,String>{
ProgressDialog loading;
@Override
protected void onPreExecute() {
super.onPreExecute();
loading = ProgressDialog.show(SiswaTampilDetail.this,"Updating...","Wait...",false,false);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
loading.dismiss();
Toast.makeText(SiswaTampilDetail.this,s,Toast.LENGTH_LONG).show();
}
@Override
protected String doInBackground(Void... params) {
HashMap<String,String> hashMap = new HashMap<>();
hashMap.put(Konfigurasi.KEY_SISWA_IDSISWA,idsiswa);
hashMap.put(Konfigurasi.KEY_SISWA_NIS,nis);
hashMap.put(Konfigurasi.KEY_SISWA_NAMASISWA,namasiswa);
hashMap.put(Konfigurasi.KEY_SISWA_ALAMAT,alamat);
hashMap.put(Konfigurasi.KEY_SISWA_JK,jk);
RequestHandler rh = new RequestHandler();
String s = rh.sendPostRequest(Konfigurasi.URL_SISWA_EDIT,hashMap);
return s;
}
}
UpdateSiswa us = new UpdateSiswa();
us.execute();
}
}
Setelah selesai mengikuti langkah-langkah di atas semua maka program Android siap dijalankan di emulator atau di HP/Device Android langsung. Jika masih ada yang error silahkan cek kembali File Java Class dan xml nya sudah benar atau belum.
Untuk CRUD ke table lainya silahkan pelajari dan eksperimen secara mandiri. Demikian tutorial CRUD dengan MySQL pada Android Studio, semoga bermanfaat. Jika ada pertanyaan silahkan tuliskan di kolom komentar.
Catatan : Jangan lupa untuk menghidupkan Apache dan MySQL pada xampp
Be the first to comment