Assalamualaikum

Hayy sahabat blogger ketemu lagi di blog NR Informatika, dimana terdapat beberapa artikel tentang Pemrograman Java Netbean, Pemrograman PHP, dan Pemrograman Android Studio. Nah pada artikel sebelumnya saya sudah share tentang SQLite pada Android, dimana dijelaskan bagaimana kita bisa menyimpan data di SQLite (sementara). Sedangkan pada kesempatan kali ini saya akan membagikan pengetahuan dan pengalaman tentang CRUD database MySQL dengan PHP pada aplikasi APK android. Yuk langsung saja baca teori singkat nya terlebih dahulu sebelum ke tutorial!

Teori Singkat


Definisi CRUD

CRUD ialah singkatan dari Create, Read Update, Delete. CRUD adalah operasi pemrograman yang menawarkan fungsi penuh, dalam memahami pemrograman komputer, CRUD merupakan fungsi yang esensial untuk dipahami. Anda perlu memahami fungsi yang diimplementasikan dari database atau aplikasi, tidak hanya arti dari sebagian fungsi saja. Fungsi CRUD merupakan fungsi yang secara konstan digunakan dan merupakan bagian yang tidak terpisahkan dari pekerjaan seorang programmer. Ini karena sebagian besar pemrograman komputer modern menggunakan fungsi CRUD.

Create

Fungsi Create ini memungkinkan anda membuat record baru dalam database. Dalam aplikasi SQL, fungsi create sering disebut juga sebagai insert. Anda dapat membuat baris baru dan mengisinya dengan data yang sesuai dengan setiap atribut. Tetapi, hanya administrator yang dapat menambahkan atribut baru ke tabel itu sendiri.

Read

Fungsi Read hampir mirip dengan fungsi search, fungsi ini memungkinkan anda untuk mencari dan mengambil data tertentu dalam sebuah tabel dan membaca nilainya. Anda dapat menemukan record yang diinginkan menggunakan kata kunci atau memfilter data berdasarkan kriteria yang diinginkan.

Update

Fungsi Update bisa anda gunakan untuk memodifikasi record yang telah disimpan di database. Namun, anda perlu mengubah berbagai informasi terkait agar bisa memodifikasi record yang diinginkan secara utuh. Record yang ada dalam database harus diubah dan semua nilai atribut diubah untuk mencerminkan karakteristik baru yang diinginkan.

Delete

Fungsi Delete digunakan ketika ada record atau data yang tidak lagi dibutuhkan dalam database, fungsi ini dapat digunakan untuk menghapus data tersebut. Beberapa aplikasi database relasional mungkin mengizinkan kamu untuk melalukan hard delete atau soft delete. Hard delete akan secara menghapus catatan dari database permanen.Sementara, soft delete hanya akan memperbaharui status baris untuk menunjukan bahwa data telah dihapus meskipun data tersebut tetap ada dan utuh.


PHP dan MySQL

PHP dan MySQL merupakan kolaborasi antara bahasa pemrograman dan layanan database yang populer saat ini. PHP adalah bahasa pemrograman script server side yang didesain untuk pengembangan web. Selain itu PHP juga bisa digunakan sebagai bahasa pemrograman umum yang digunakan pada website seperti wikipedia, wordPress dan lain-lain. Penggunakan PHP banyak dipadukan dengan MySQL. MySQL adalah sebuah perangkat lunak sistem manajemen basis data SQL(DBMS) yang multithread dan multi-user.

Keduanya dapat digunakan secara gratis, diliris dengan lisensi open source, dan memiliki komunitas pengguna yang besar. Kelebihan-kelebihan menjadikan PHP dan MySQL sebagai salah satu pilihan teknologi yang digunakan untuk membuat website. Developer harus memiliki kompetensi yang memadahi untuk dapat memanfaatkan PHP dan MySQL. Untuk PHP diperlukan pemahaman sintaks, variabel, tipe data, metode pembuatan form, struktur kontrol, konsep cookies, konsep session, metode pembuatan fungsi, metode pengelolaan file, dan manajemen direktori. Untuk MySQL, harus memahami dasar-dasar Structure Query Language (SQL), SQL merupakan bahasa standar untuk menyimpan, mengubah, dan mengambil data pada database.

Web Service

Web service merupakan aplikasi yang berisi sekumpulan basis data (database) dan perangkat lunak (Software) atau bagian dari program perangkat lunak yang diakses secara remote oleh piranti dengan perantara tertentu. Melalui web service memungkinkan pengguna untuk mengatasi permasalahan berupa interoperability dan mengintegrasikan sistem berbeda.

Pada umumnya web service memiliki ciri khas khusus berupa  URL seperti web. Yang membedakan adalah interaksi yang diberikan oleh web service itu sendiri. URL pada web service hanya mengandung sekumpulan informasi, perintah, dan konfigurasi.

Web service mampu menukar data tanpa memandang sumber database, bahasa yang digunakan, dan platform apa data tersebut dikonsumsi. Kemampuan itulah yang memungkinkan web service menjadi jembatan penghubung untuk berbagai sistem.

Tutorial Membuat CRUD Database MySQL pada Aplikasi Android dengan PHP

  1. Pertama buka dan jalankan Aplikasi Android Studio IDE, lalu buat project baru pilih "Create New Project".


  2. Pilih "Empty Activity", lalu "Next".

  3. Configure Your Project sesuaikan dengan keinginan, jika sudah klik "Finish".

    Keterangan :
        Name → CRUD_PHPMySQL
        Package name  → sesuaikan dengan keinginan, bisa default.
        Save location →  sesuaikan lokasi penyimpanannya.
        Language Java
        Minimum SDK → API 16:Android 4.1(JellyBean)
  4. Setelah itu akan muncul jendela project Baru.
  5. Selanjutnya buka dan edit script pada activity_main.xml, ubah menjadi layout LinearLayout dan ketikan kode program seperti berikut:
    <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    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="Nama Mahasiswa :"
    android:textSize="18dp"/>
    <EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/editTextName"
    android:hint="Masukan Nama Anda"
    android:inputType="text" />
    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="N R P :"
    android:textSize="18dp" />
    <EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/editTextNRP"
    android:hint="Masukan NRP"
    android:inputType="number"/>
    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Kelas :"
    android:textSize="18dp" />
    <Spinner
    android:id="@+id/spinnerkelas"
    android:spinnerMode="dropdown"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Blog Url :"
    android:textSize="18dp"/>
    <EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/editTextBlog"
    android:hint="Input Link URL Blog"
    android:inputType="text"/>
    <Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Tambah Data Mahasiswa"
    android:id="@+id/buttonAdd" />
    <Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Daftar Mahasiswa"
    android:id="@+id/buttonView" />
    </LinearLayout>

    Preview Design + Blueprint dari script diatas akan tampil seperti berikut:

  6. Kemudian buka dan ubah script pada file MainActivity.java seperti dibawah ini:
    package ryeyen08.blogspot.com.crud_phpmysql;

    import android.app.ProgressDialog;
    import android.content.Intent;
    import android.os.AsyncTask;
    import androidx.appcompat.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Adapter;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Spinner;
    import android.widget.Toast;
    import java.util.HashMap;

    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private EditText editTextName;
    private EditText editTextNRP;
    private EditText editTextBlog;
    private Button buttonAdd;
    private Button buttonView;
    private Spinner spinnerKelas;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    editTextName = (EditText) findViewById(R.id.editTextName);
    editTextNRP = (EditText) findViewById(R.id.editTextNRP);
    editTextBlog = (EditText) findViewById(R.id.editTextBlog);
    buttonAdd = (Button) findViewById(R.id.buttonAdd);
    buttonView = (Button) findViewById(R.id.buttonView);
    spinnerKelas = (Spinner) findViewById(R.id.spinnerkelas);
    String[] spinnerItem = new String[]{"TI-1","TI-2","TI-3","TI-Mlm"};
    ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item,spinnerItem);
    spinnerKelas.setAdapter(adapter);

    buttonAdd.setOnClickListener(this);
    buttonView.setOnClickListener(this);
    }

    private void addMhs(){
    final String name = editTextName.getText().toString().trim();
    final String nrp = editTextNRP.getText().toString().trim();
    final String blog = editTextBlog.getText().toString().trim();
    final String kelas =(String) spinnerKelas.getSelectedItem();
    Log.d("kelas",kelas);

    class AddMhs 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_MHS_NAMA,name);
    params.put(konfigurasi.KEY_MHS_NRP,nrp);
    params.put(konfigurasi.KEY_MHS_KELAS,kelas);
    params.put(konfigurasi.KEY_MHS_BLOG,blog);

    RequestHandler rh = new RequestHandler();
    String res = rh.sendPostRequest(konfigurasi.URL_ADD, params);
    Log.d("res",res);
    return res;
    }
    }
    AddMhs ae = new AddMhs();
    ae.execute();
    }
    @Override
    public void onClick(View v) {
    if(v == buttonAdd){
    addMhs();
    }
    if(v == buttonView){
    startActivity(new Intent(this,TampilSemuaMhs.class));
    }
    }
    }

  7. Setelah itu buat Layout baru untuk menampilkan semua data mahasiswa. Kita buat activity baru yang berisi layout activity_tampil_semua_mhs.xml dan class TampilSemuaMhs.java. Cara nya dibawah ini:

  8. Isikan kolom Activity Name dengan TampilSemuaMhs, lalu klik Finish.

  9. Buka activity_tampil_semua_mhs.xml yang sudah dibuat tadi karena layout ini akan digunakan untuk melihat semua data mahasiswa yang sudah diinputkan pada layout utama. Silahkan tambahkan code-code dibawah ini pada layout tersebut:
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    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=".TampilSemuaMhs">

    <ListView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/listView" />
    </LinearLayout>
    Preview Design + Blueprint dari script diatas akan tampil seperti berikut:

  10. Selanjutnya buka file class TampilSemuaMhs.java, silahkan ketikan code-code dibawah ini:
    package ryeyen08.blogspot.com.crud_phpmysql;

    import android.app.ProgressDialog;
    import android.content.Intent;
    import android.os.AsyncTask;
    import androidx.appcompat.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.AdapterView;
    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 TampilSemuaMhs extends AppCompatActivity implements ListView.OnItemClickListener{
    private ListView listView;
    private String JSON_STRING;

    @Override protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_tampil_semua_mhs);
    listView = (ListView) findViewById(R.id.listView);
    listView.setOnItemClickListener(this);
    getJSON();
    }

    private void showMhs(){
    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 id = jo.getString(konfigurasi.TAG_ID);

    String name = jo.getString(konfigurasi.TAG_NAMA);
    HashMap<String,String> mhs = new HashMap<>();
    mhs.put(konfigurasi.TAG_ID,id);
    mhs.put(konfigurasi.TAG_NAMA,name);
    list.add(mhs);
    }
    }
    catch (JSONException e) { e.printStackTrace();
    }
    ListAdapter adapter = new SimpleAdapter(
    TampilSemuaMhs.this, list, R.layout.list_item,
    new String[]{konfigurasi.TAG_ID,konfigurasi.TAG_NAMA},
    new int[]{R.id.id, R.id.name});
    listView.setAdapter(adapter);
    }
    private void getJSON(){
    class GetJSON extends AsyncTask<Void,Void,String>{
    ProgressDialog loading;
    @Override
    protected void onPreExecute() {
    super.onPreExecute();
    loading = ProgressDialog.show(TampilSemuaMhs.this,"Mengambil Data","Mohon Tunggu...",false,false);
    }
    @Override
    protected void onPostExecute(String s) {
    super.onPostExecute(s);
    loading.dismiss();
    JSON_STRING = s;
    showMhs();
    }
    @Override protected String doInBackground(Void... params) { RequestHandler rh = new RequestHandler();
    Log.d("testing","test");
    String s = rh.sendGetRequest(konfigurasi.URL_GET_ALL);
    Log.d("response",s);

    return s;
    }
    }
    GetJSON gj = new GetJSON();
    gj.execute();
    }
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    Intent intent = new Intent(this, TampilMhs.class);
    HashMap<String,String> map =(HashMap)parent.getItemAtPosition(position);
    String mhsId = map.get(konfigurasi.TAG_ID).toString();
    intent.putExtra(konfigurasi.MHS_ID,mhsId);
    startActivity(intent);
    }
    }

  11. Kemudian membuat activity baru lagi untuk ListView, pembuatan langkah nya seperti langkah ke - 7 diatas. Berikan Activity name : ListView dan Layout name : list_item, lihat seperti gambar dibawah ini :

  12. Bukalah file list_item.xml yang dibuat tadi, lalu isikan code berikut :
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
    android:id="@+id/id"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
    <TextView
    android:id="@+id/name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
    </LinearLayout>

  13. Setelah itu untuk Class ListView.java tidak usah diubah atau ditambahkan lagi code biarkan default saja :
    package ryeyen08.blogspot.com.crud_phpmysql;

    import androidx.appcompat.app.AppCompatActivity;

    import android.os.Bundle;

    public class ListView extends AppCompatActivity {

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

  14. Selanjutnya membuat Activity baru untuk menampilkan detail salah satu data mahasiswa yang di klik dari tampilkan semua data mahasiswa. Cara membuatnya seperti langkah ke-7 diatas, berikanlah Activity name : TampilMhs dan layout default sperti gambar dibawah :

  15. Bukalah layout activity_tampil_mhs.xml, lalu masukan lah code program seperti dibawah:
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    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="ID Mahasiswa :" />
    <EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/editTextId" />
    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Nama Mahasiswa :" />
    <EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/editTextName" />
    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="N R P :" />
    <EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/editTextNRP" />
    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Kelas :"
    android:textSize="18dp" />
    <Spinner
    android:id="@+id/spinnerkelas"
    android:spinnerMode="dropdown"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Blog URL :" />
    <EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/editTextBlog" />
    <Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Update Data Mahasiswa"
    android:id="@+id/buttonUpdate" />
    <Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Hapus Data"
    android:id="@+id/buttonDelete" />
    </LinearLayout>
    Preview Design + Blueprint dari script diatas akan tampil seperti berikut:

  16. Setelah itu, untuk code pada file Class TampilMhs.java ketikan seperti berikut :
    package ryeyen08.blogspot.com.crud_phpmysql;

    import android.app.ProgressDialog;
    import android.content.DialogInterface;
    import android.content.Intent;
    import android.os.AsyncTask;
    import androidx.appcompat.app.AlertDialog;
    import androidx.appcompat.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Spinner;
    import android.widget.Toast;
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    import java.util.HashMap;

    public class TampilMhs extends AppCompatActivity implements View.OnClickListener{
    private EditText editTextId;
    private EditText editTextName;
    private EditText editTextNRP;
    private EditText editTextKelas;
    private EditText editTextBlog;
    private Button buttonUpdate;
    private Button buttonDelete;
    private Spinner spinnerKelas;
    private String id;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_tampil_mhs);
    Intent intent = getIntent();
    id = intent.getStringExtra(konfigurasi.MHS_ID);
    editTextId = (EditText) findViewById(R.id.editTextId);
    editTextName = (EditText) findViewById(R.id.editTextName);
    editTextNRP = (EditText) findViewById(R.id.editTextNRP);
    spinnerKelas = (Spinner) findViewById(R.id.spinnerkelas);
    String[] spinnerItem = new String[]{"TI-1","TI-2","TI-3","TI-Mlm"};
    ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item,spinnerItem);
    spinnerKelas.setAdapter(adapter);
    editTextBlog = (EditText) findViewById(R.id.editTextBlog);
    buttonUpdate = (Button) findViewById(R.id.buttonUpdate);
    buttonDelete = (Button) findViewById(R.id.buttonDelete);
    buttonUpdate.setOnClickListener(this);
    buttonDelete.setOnClickListener(this);
    editTextId.setText(id);
    getMhs();
    }
    private void getMhs(){
    class GetMhs extends AsyncTask<Void,Void,String>{ ProgressDialog loading;
    @Override
    protected void onPreExecute() { super.onPreExecute();
    loading = ProgressDialog.show(TampilMhs.this,"Fetching...","Wait...",false,false);
    }
    @Override
    protected void onPostExecute(String s) {
    super.onPostExecute(s);
    loading.dismiss();
    showMhs(s);
    }
    @Override
    protected String doInBackground(Void... params) { RequestHandler rh = new RequestHandler();
    String s = rh.sendGetRequestParam(konfigurasi.URL_GET_EMP,id);
    return s;
    }
    }
    GetMhs ge = new GetMhs();
    ge.execute();
    }
    private void showMhs(String json){
    try {
    JSONObject jsonObject = new JSONObject(json);
    JSONArray result = jsonObject.getJSONArray(konfigurasi.TAG_JSON_ARRAY);
    JSONObject c = result.getJSONObject(0);
    String name = c.getString(konfigurasi.TAG_NAMA);
    String nrp = c.getString(konfigurasi.TAG_NRP);
    String kelas = c.getString(konfigurasi.TAG_KELAS);
    String blog = c.getString(konfigurasi.TAG_BLOG);
    editTextName.setText(name);
    editTextNRP.setText(nrp);

    editTextBlog.setText(blog);
    }
    catch (JSONException e) { e.printStackTrace();
    }
    }
    private void updateMhs(){
    final String name = editTextName.getText().toString().trim();
    final String nrp = editTextNRP.getText().toString().trim();
    final String kelas =(String) spinnerKelas.getSelectedItem();
    Log.d("kelas",kelas);
    final String blog = editTextBlog.getText().toString().trim();
    class UpdateMhs extends AsyncTask<Void,Void,String>{ ProgressDialog loading;
    @Override
    protected void onPreExecute() {
    super.onPreExecute();
    loading = ProgressDialog.show(TampilMhs.this,"Updating...","Wait...",false,
    false);
    }
    @Override
    protected void onPostExecute(String s) {
    super.onPostExecute(s);
    loading.dismiss();
    Toast.makeText(TampilMhs.this,s,Toast.LENGTH_LONG).show();
    }
    @Override
    protected String doInBackground(Void... params) { HashMap<String,String> hashMap = new HashMap<>();
    hashMap.put(konfigurasi.KEY_MHS_ID,id);
    hashMap.put(konfigurasi.KEY_MHS_NAMA,name);
    hashMap.put(konfigurasi.KEY_MHS_NRP,nrp);
    hashMap.put(konfigurasi.KEY_MHS_KELAS,kelas);
    hashMap.put(konfigurasi.KEY_MHS_BLOG,blog);
    RequestHandler rh = new RequestHandler();
    String s = rh.sendPostRequest(konfigurasi.URL_UPDATE_EMP,hashMap);
    return s;
    }
    }
    UpdateMhs ue = new UpdateMhs();
    ue.execute();
    }
    private void deleteMhs(){
    class DeleteMhs extends AsyncTask<Void,Void,String> { ProgressDialog loading;
    @Override
    protected void onPreExecute() {
    super.onPreExecute();
    loading = ProgressDialog.show(TampilMhs.this, "Updating...", "Tunggu...", false, false);
    }
    @Override
    protected void onPostExecute(String s) {
    super.onPostExecute(s);
    loading.dismiss();
    Toast.makeText(TampilMhs.this, s, Toast.LENGTH_LONG).show();
    }
    @Override
    protected String doInBackground(Void... params) { RequestHandler rh = new RequestHandler();
    String s = rh.sendGetRequestParam(konfigurasi.URL_DELETE_EMP, id);
    return s;
    }
    }
    DeleteMhs de = new DeleteMhs();
    de.execute();
    }
    private void confirmDeleteMhs(){
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
    alertDialogBuilder.setMessage("Apakah Kamu Yakin Ingin Menghapus Data ini?");
    alertDialogBuilder.setPositiveButton("Ya", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface arg0, int arg1) {
    deleteMhs();
    startActivity(new Intent(TampilMhs.this,TampilSemuaMhs.class));
    }
    }
    );
    alertDialogBuilder.setNegativeButton("Tidak", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface arg0, int arg1) { } });
    AlertDialog alertDialog = alertDialogBuilder.create();
    alertDialog.show();
    }
    @Override
    public void onClick(View v) { if(v == buttonUpdate){ updateMhs();
    }
    if(v == buttonDelete){ confirmDeleteMhs();
    }
    }
    }

  17. Kemudian, persiapan konfigurasi program, dengan membuat class baru dengan nama konfigurasi.java. Klik kanan pada direktori nama package, pilih New>Java Class:


  18. Dan masukanlah code program berikut ini :

    package ryeyen08.blogspot.com.crud_phpmysql;
    public class konfigurasi {
    public static final String URL_ADD="http://android.unggasid.com/mhs/tambahMhs.php";
    public static final String URL_GET_ALL = "http://android.unggasid.com/mhs/tampilSemuaMhs.php";
    public static final String URL_GET_EMP ="http://android.unggasid.com/mhs/tampilMhs.php?id=";
    public static final String URL_UPDATE_EMP = "http://android.unggasid.com/mhs/updateMhs.php";
    public static final String URL_DELETE_EMP = "http://android.unggasid.com/mhs/hapusMhs.php?id=";

    public static final String KEY_MHS_ID = "id";
    public static final String KEY_MHS_NAMA = "name";
    public static final String KEY_MHS_NRP = "nrp";
    public static final String KEY_MHS_KELAS = "kelas";
    public static final String KEY_MHS_BLOG = "blog";

    public static final String TAG_JSON_ARRAY="result";
    public static final String TAG_ID = "id";
    public static final String TAG_NAMA = "name";
    public static final String TAG_NRP = "nrp";
    public static final String TAG_KELAS = "kelas";
    public static final String TAG_BLOG = "blog";

    public static final String MHS_ID = "mhs_id";
    }

  19. Selanjutnya membuat Class RequestHandler.java, class ini berfungsi menangani permintaan jaringan. Caranya seperti langkah ke- 17, lalu ketikan code program seperti berikut :

    package ryeyen08.blogspot.com.crud_phpmysql;

    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 yang digunakan mengirim httpPostRequest
    public String sendPostRequest(String requestURL, HashMap<String, String> postDataParams)
    {
    URL url;
    StringBuilder sb = new StringBuilder();
    try {
    url = new URL(requestURL);
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setReadTimeout(15000);
    conn.setConnectTimeout(15000);
    conn.setRequestMethod("POST");
    conn.setDoInput(true);
    conn.setDoOutput(true);

    OutputStream os = conn.getOutputStream();
    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;
    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();
    }
    }

  20. Terakhir atur AndroidManifest.xml, untuk ditambahkan activity dan connect ke internet, seperti pada code program dibawah ini :
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.crud_phpmysql">
    <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.CRUD_PHPMySQL">
    <activity android:name=".TampilMhs"></activity>
    <activity android:name=".ListView" />
    <activity android:name=".TampilSemuaMhs" />
    <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>

  21. Coba lah Run App untuk menjalankan project dengan menggunakan Emulator yang ada pada android atau menggunakan Emulator di smartphone. Running programnya seperti video berikut :


                                                                                                                                                                                                                                                            
Tutorial Konfigurasi  Database dan File PHP (lanjutan

Membuat Database

Setelah berhasil melakukan tutorial diatas pada Android Studio, sekarang kita akan membuat konfigurasi ke database dan juga membuat file PHP. Disini saya akan membuat database  menggunakan PhpMyAdmin di localhost, dimana database ini akan digunakan untuk menyimpan data Mahasiswa. Anda bisa menginstal aplikasi webserver XAMPP atau Laragon, disini saya menggunakan xampp. Adapun ketentuannya bisa simak step by step seperti dibawah :
  1. Download dan instal apliksi XAMPP disini.
  2. Mengakses PhpMyAdmin.
  3. Untuk membuat database di MySQL kita akan menggunakan webserver XAMPP. Sekarang silahkan jalankan aplikasi XAMPP yang sudah terinstal di PC atau Laptop masing-masing. 
    Buka XAMPP klik Start pada model Apache dan MySQL.

  4. Selanjutnya buka browser yang anda gunakan contohnya Google Chrome, lali ketik pada URL-nya localhost/phpMyAdmin.

  5. Kemudian membuat database baru. Database yang akan kita buat yaitu db_android. Caranya yaitu isikan nama database db_android pada kolom database name lalu klik create.
  6. Setelah itu database sudah berhasil dibuat, maka langkah  selanjutnya adalah membuat table. Caranya isikan tb_mhs pada kolom name, untuk of columns-nya isikan 5 lalu klik Go.
  7. Isikan field seperti dibawah ini , setelah itu klik Save.

  8. Selanjutnya coba isikan data seperti gambar dibawah ini pada table yang telah dibuat:

Membuat File Konfigurasi PHP

    Kita membuat file-file PHP, file-file yang akan kita buat nantinya akan digunakan sebagai web service untuk melakukan parsing data dari aplikasi Android. Buatlah file PHP ini pada aplikasi text editor yang anda gunakan, misalnya notepad yang aplikasi bawaan atau aplikasi Sublime download sini, atau bisa juga pakai aplikasi Visual Studio Code download sini.  

    Sebelum membuat file PHP kita ubah terlebih dahulu path yang ada di file konfigurasi.java agar akses Android terhubung dengan database yang ada di perangkat komputer. Caranya menggunakan IP Address perangkat komputer anda, jika belum tahu IP Address-nya gunakan perintah CMD atau bisa Windows+R→ ketik CMD, lalu ketikan ipconfig maka akan tampil berapa IP perangkat tersebut. Contohnya seperti dibawah ini :

    Pada contoh gambar diatas IP tertera adalah maka path untuk membuat script-nya seperti berikut : https://198.130.1.101/android/nama_file.php
Dibawah ini contoh file konfigurasi.java yang sudah diubah, Sesuaikan nanti IP Address perangkat Anda :


Selanjutnya kita buat file-file PHP, untuk menyimpan file PHP ini buat folder android pada directory xampp/htdocs/android dan untuk save dengan ekstensi(.php). Nanti akan nampak seperti gambar berikut : 

koneksi.php
    koneksi.php ini berguna untuk membuat koneksi dengan database yang sudah kita buat diatas. Berikut source code-nya :
<?php
define('HOST', 'localhost');
define('USER', 'root');
define('PASS', '');
define('DB', 'db_android');
$con = mysqli_connect(HOST, USER, PASS, DB) or die ('Gagal');
?>
tambahMhs.php
    tambahMhs.php ini berguna untuk memasukan atau menginput data. Berikut source code-nya :
<?php
if($_SERVER['REQUEST_METHOD']=='POST'){
//Mendapatkan Nilai Variable
$name = $_POST['name'];
$nrp = $_POST['nrp'];
$kelas = $_POST['kelas'];
$blog = $_POST['blog'];
//Pembuatan Syntax SQL
$sql = "INSERT INTO tb_mhs (nama,nrp,kelas,blog) VALUES ('$name','$nrp','$kelas','$blog')";
//Import File Koneksi database
require_once('koneksi.php');
//Eksekusi Query database
if(mysqli_query($con,$sql)){
echo 'Berhasil Menambahkan Data Mahasiswa';
}else{
echo 'Gagal Menambahkan Data Mahasiswa';
}
mysqli_close($con);
}
?>

tampilMhs.php
    tampilMhs.php ini berguna untuk menampilkan detail Mahasiswa yang sudah ditampilkan dari file sebelumnya. Berikut source code-nya :
 <?php
//untuk mendapatkan nilai ID dari table mahasiswa
$id = $_GET['id'];
//Importing database
require_once('koneksi.php');
//Sql query dengan table mhs
$sql = "SELECT * FROM tb_mhs WHERE id=$id";
//Mendapatkan Hasil
$r = mysqli_query($con, $sql);
//Memasukkan Hasil Kedalam Array
$result = array();
$row = mysqli_fetch_array($r);
array_push($result, array(
"id" => $row['id'],
"name" => $row['nama'],
"nrp" => $row['nrp'],
"kelas" => $row['kelas'],
"blog" => $row['blog']
));
//Menampilkan data dalam format JSON
echo json_encode(array('result' => $result));
mysqli_close($con);
?>
tampilSemuaMhs.php
    tampilSemuaMhs.php ini berguna untuk menampilkan list mahasiswa yang sudah diinputkan. Berikut source code-nya :
<?php
//Import File Koneksi Database
require_once('koneksi.php');
//Membuat SQL Query
$sql = "SELECT * FROM tb_mhs";
//Mendapatkan Hasil
$r = mysqli_query($con,$sql);
//Membuat Array Kosong
$result = array();
while($row = mysqli_fetch_array($r)){
//Memasukkan Nama dan ID kedalam Array Kosong yang telah dibuat
array_push($result,array(
"id"=>$row['id'],
"name"=>$row['nama']
));
}
//Menampilkan Array dalam Format JSON
echo json_encode(array('result'=>$result));
mysqli_close($con);
?>
updateMhs.php
    updateMhs.php ini berguna untuk mengedit atau update data Mahasiswa yang sudah disimpan. Berikut source code-nya :
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
//MEndapatkan Nilai Dari Variable
$id = $_POST['id'];
$name = $_POST['name'];
$nrp = $_POST['nrp'];
$kelas = $_POST['kelas'];
$blog = $_POST['blog'];
//import file koneksi database
require_once('koneksi.php');
//Membuat SQL Query
$sql = "UPDATE tb_mhs SET nama = '$name', nrp = '$nrp', kelas = '$kelas', blog = '$blog' WHERE id = $id;";
//Meng-update Database
if (mysqli_query($con, $sql)) {
echo 'Berhasil Update Data Mahasiswa';
} else {
echo 'Gagal Update Data Mahasiswa';
}
mysqli_close($con);
}
?>
hapusMhs.php
    hapusMhs.php ini berguna untuk menghapus atau delete data. Berikut source code-nya :
<?php
//Mendapatkan Nilai ID
$id = $_GET['id'];
//Import File Koneksi Database
require_once('koneksi.php');
//Membuat SQL Query
$sql = "DELETE FROM tb_mhs WHERE id=$id";
//Menghapus Nilai pada Database
if(mysqli_query($con,$sql)){
echo 'Berhasil Menghapus Data Mahasiswa';
}else{
echo 'Gagal Menghapus Data Mahasiswa';
}
mysqli_close($con);
?>

Terakhir jalankan aplikasi menggunakan emulator yang tersedia di PC atau bisa dengan smartphone. NOTE : saat sebelum running pastikan PC tersambung dengan internet, dan pstikan XAMPP atau webserver yang dipakai dalam kondisi sudah jalan. Hasilnya akan tampak seperti video berikut :


Gimana sahabat blogger sudah berhasil? jika ada kendala bisa langsung komentar kita disuksi bersama. Mohon maaf jika ada kesalahan kata.
Terimakasihhh see next artikelll...