Tutorial Android Studio : #9 CRUD Android dengan MySQL

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 :

  1. Pembuatan database pada MySQL.
  2. Pembuatan File PHP.
  3. 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);
?>

 

Baca Juga  Cara Membuat Game Menggunakan Scratch 3.12.0

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();
    }

}

 

Baca Juga  Pengenalan Wajah (Face Recognition) dengan OpenCV dan Python

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);
    }

}

 

Baca Juga  Tutorial Android Studio : #5 Passing Input Data pada Android Studio

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

 

Related Post

Be the first to comment

Leave a Reply

Your email address will not be published.


*


error: Ga bisa dicopy