PERTEMUAN KE – 14
Aplikasi dengan Database (MySQL)
A. TUJUAN
Mahasiswa diharapkan dapat memahami dan mengetahui tentang komponen widget, yaitu Webservice, mysql dan json yang digunakan pada aplikasi mobile.
B. TEORI SINGKAT
JSON (JavaScript Object Notation) adalah format pertukaran data yang ringan, mudah dibaca dan ditulis oleh manusia, serta mudah diterjemahkan dan dibuat (generate) oleh komputer. Format ini dibuat berdasarkan bagian dari Bahasa Pemprograman JavaScript, Standar ECMA-262 Edisi ke-3 – Desember 1999. JSON merupakan format teks yang tidak bergantung pada bahasa pemrograman apapun karena menggunakan gaya bahasa yang umum digunakan oleh programmer keluarga C termasuk C, C++, C#, Java, JavaScript, Perl, Python dll. Oleh karena sifat-sifat tersebut, menjadikan JSON ideal sebagai bahasa pertukaran-data.
Metode JSON dalam pengiriman data dilakukan, karena JSON memiliki beberapa kelebihan - kelebihan dibandingkan XML, kelebihan – kelebihan tersebut adalah:
1. Format Penulisan Untuk merepresentasikan sebuah struktur data yang rumit dan berbentuk hirarkis penulisan JSON relatif lebih terstruktur dan mudah.
2. Ukuran Ukuran karakter yang dibutuhkan JSON lebih kecil dibandingkan XML untuk data yang sama. Hal ini tentu berpengaruh pula pada kecepatan pertukaran data, walaupun tidak signifikan untuk data yang kecil, namun cukup berarti jika koneksi yang digunakan relatif lambat untuk mengakses aplikasi web kaya fitur yang memanfaatkan pertukaran data. Di sini JSON lebih unggul dibandingkan XML, kecuali jika data dikompresi terlebih dahulu sebelum dikirimkan, perbedaan JSON dan XML yang telah dikompresi tidaklah signifikan.
3. Browser Parsing Proses parsing merupakan proses pengenalan token atau bagian-bagian kecil dalam rangkaian dokumen XML/JSON. Contohnya, terdapat data text dalam format JSON. Data tersebut harus di-parsing terlebih dahulu sebelum dapat diakses dan dimanipulasi. Browser parsing berarti proses parsing yang terjadi pada sisi client/browser.
Melakukan browser parsing pada JSON lebih sederhana dibandingkan pada XML, JSON menggunakan function JavaScript eval() untuk melakukan parsing. Sementara dokumen XML di-parsing oleh XMLHttpRequest. Rata-rata survei menobatkan JSON sebagai pemenang jika diadu kecepatan parsingnya. JSON terbuat dari dua struktur:
1. Kumpulan pasangan nama/nilai. Pada beberapa bahasa, hal ini dinyatakan sebagai objek (object), rekaman (record), struktur (struct), kamus (dictionary), tabel hash (hash table), daftar berkunci (keyed list), atau associative array.
2. Daftar nilai terurutkan (an ordered list of values). Pada kebanyakan bahasa, hal ini dinyatakan sebagai larik (array), vektor (vector), daftar (list), atau urutan (sequence).
Struktur-struktur data ini disebut sebagai struktur data universal. Pada dasarnya, semua bahasa pemprograman moderen mendukung struktur data ini dalam bentuk yang sama maupun berlainan. Hal ini pantas disebut demikian karena format data mudah dipertukarkan dengan bahasa-bahasa pemprograman yang juga berdasarkan pada struktur data ini. JSON menggunakan bentuk sebagai berikut:
1. Objek. Objek adalah sepasang nama/nilai yang tidak terurutkan. Objek dimulai dengan { (kurung kurawal buka) dan diakhiri dengan } (kurung kurawal tutup). Setiap nama diikuti dengan : (titik dua) dan setiap pasangan nama/nilai dipisahkan oleh , (koma).
Gambar. Objek JSON
2. Larik. Larik adalah kumpulan nilai yang terurutkan. Larik dimulai dengan [ (kurung kotak buka) dan diakhiri dengan ] (kurung kotak tutup). Setiap nilai dipisahkan oleh , (koma).
Gambar. Larik JSON
3. Nilai. Nilai (value) dapat berupa sebuah string dalam tanda kutip ganda, atau angka, atau
true atau false atau null, atau sebuah objek atau sebuah larik. Strukturstruktur tersebut
dapat disusun bertingkat.
Gambar Nilai JSON
4. String. String adalah kumpulan dari nol atau lebih karakter Unicode, yang dibungkus dengan tanda kutip ganda. Di dalam string dapat digunakan backslash escapes "\" untuk membentuk karakter khusus. Sebuah karakter mewakili karakter tunggal pada string. String sangat mirip dengan string C atau Java.
Gambar. String JSON.
5. Angka Angka adalah sangat mirip dengan angka di C atau Java, kecuali format oktal dan heksadesimal tidak digunakan.
Gambar. Angka JSON
C. PRAKTIK
1. Dalam hal ini ada 3 langkah yang harus dikerjakan. Pertama adalah membuat database dan tabelnya. Kedua membuat file php. Sedangkan ketiga membuat project dalam Android Studio.
2. Langkah pertama, buatlah database dengan nama “mahasiswa” dan di dalamnya buat tabel “dataprib” dengan field “id tipe int autoincement”, “nomhs tipe varchar”, “nama tipe varchar”, “ipk tipe double”
3. Langkah kedua, buatlah file php berikut ini.
4. Buat file semuamahasiswa.php
<?php
error_reporting(E_ALL ^ E_DEPRECATED);
//koneksi database mysql
$dbhost = "localhost";
$dbuser = "root";
$dbpass = "root";
$dbname = "mahasiswa";
mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($dbname);
//buat array untuk menampung respon dari JSON
$respon = array();
// query menampilkan semua data member
$result = mysql_query("SELECT *FROM dataprib") or die(mysql_error());
// jika data ada/tidak kosong if (mysql_num_rows($result) > 0) { // looping semua hasil
// member node
$respon["member"] = array();
while ($row = mysql_fetch_array($result)) { // temp member array
$member = array();
$member["id"] = $row["id"];
$member["nomhs"] = $row["nomhs"];
$member["nama"] = $row["nama"];
$member["ipk"] = $row["ipk"];
//tambahkan array $member pada array final $respon array_push($respon["member"], $member);
}
// sukses
$respon["sukses"] = 1;
// memprint/mencetak JSON respon echo json_encode($respon);
} else {
// jika data kosong $respon["sukses"] = 0;
$respon["pesan"] = "Tidak ada member";
// memprint/mencetak JSON respon echo json_encode($respon);
}
?>
5. Buat file mahasiswadetil.php
<?php
error_reporting(E_ALL ^ E_DEPRECATED);
//koneksi database mysql
$dbhost = "localhost";
$dbuser = "root";
$dbpass = "root";
$dbname = "mahasiswa";
mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($dbname);
//buat array untuk menampung respon dari JSON
$respon = array();
// cek apakah variabel idmem sudah terset / terisi if (isset($_GET["idmem"])) {
$idmem = $_GET['idmem'];
// query ambil data member berdasarkan id
$result = mysql_query("SELECT *FROM dataprib WHERE id = $idmem");
if (!empty($result)) {
// jika data member ada (besar dari nol) if (mysql_num_rows($result) > 0) {
$result = mysql_fetch_array($result);
// temp member array $member = array();
$member["id"] = $result["id"];
$member["nomhs"] = $result["nomhs"];
$member["nama"] = $result["nama"];
$member["ipk"] = $result["ipk"];
// sukses
$respon["sukses"] = 1;
// node member
$respon["member"] = array();
//tambahkan array $member pada array final $respon array_push($respon["member"], $member);
// memprint/mencetak JSON respon echo json_encode($respon);
} else {
// tidak ada member (kecil dari nol) $respon["sukses"] = 0;
$respon["pesan"] = "Tidak ada mahasiswa";
// memprint/mencetak JSON respon echo json_encode($respon);
} } else {
// jika query tidak tidak meghasilkan data (tidak ada member) $respon["sukses"] = 0;
$respon["pesan"] = "tidak ada mahasiswa";
// memprint/mencetak JSON respon echo json_encode($respon);
} } else {
// jika data tidak terisi/tidak terset $respon["sukses"] = 0;
$respon["pesan"] = "data belum terisi";
// memprint/mencetak JSON respon echo json_encode($respon);
}
?>
6. Buat file tambahmahasiswa.php
<?php
error_reporting(E_ALL ^ E_DEPRECATED);
//koneksi database mysql
$dbhost = "localhost";
$dbuser = "root";
$dbpass = "root";
$dbname = "mahasiswa";
mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($dbname);
//buat array untuk menampung respon dari JSON
$respon = array();
// cek apakah nilai yang dikirimkan android sudah terisi
if (isset($_POST['nomhs']) && isset($_POST['nama']) &&isset($_POST['ipk'])) { $nomhs = $_POST['nomhs'];
$nama = $_POST['nama'];
$ipk = $_POST['ipk'];
// query menambah data member
$result = mysql_query("INSERT INTO dataprib(nomhs, nama, ipk) VALUES('$nomhs', '$nama', '$ipk')");
// cek apakah query berhasil menambah data if ($result) {
// jika berhasil menambah data ke mysql $respon["sukses"] = 1;
$respon["pesan"] = "Berhasil menambah data mahasiswa.";
// memprint/mencetak JSON respon echo json_encode($respon);
} else {
// gagal menambah data member $respon["sukses"] = 0;
$respon["pesan"] = "Gagal menambah data.";
// memprint/mencetak JSON respon echo json_encode($respon);
} } else {
// jika data tidak terisi/tidak terset $respon["sukses"] = 0;
$respon["pesan"] = "data belum terisi";
// memprint/mencetak JSON respon echo json_encode($respon);
} ?>
7. Buat file updatemahasiswa.php
<?php
error_reporting(E_ALL ^ E_DEPRECATED);
//koneksi database mysql
$dbhost = "localhost";
$dbuser = "root";
$dbpass = "root";
$dbname = "mahasiswa";
mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($dbname);
//buat array untuk menampung respon dari JSON
$respon = array();
// cek apakah nilai yang dikirimkan android sudah terisi
if (isset($_POST['idmem']) && isset($_POST['nomhs']) && isset($_POST['nama']) &&
isset($_POST['ipk'])) {
$idmem = $_POST['idmem'];
$nomhs = $_POST['nomhs'];
$nama = $_POST['nama'];
$ipk = $_POST['ipk'];
// query update berdasarkan id
$result = mysql_query("UPDATE dataprib SET nomhs = '$nomhs', nama = '$nama', ipk = '$ipk' WHERE id = $idmem");
// cek apakah berhasil update atau tidak if ($result) {
// jika sukses diupdate $respon["sukses"] = 1;
$respon["pesan"] = "Data mahasiswa berhasil diupdate.";
// memprint/mencetak JSON respon echo json_encode($respon);
} else {
// gagal update data $respon["sukses"] = 0;
$respon["pesan"] = "Gagal update data.";
// memprint/mencetak JSON respon echo json_encode($respon);
} } else {
// jika data tidak terisi/tidak terset $respon["sukses"] = 0;
$respon["pesan"] = "data belum terset/terisi";
// memprint/mencetak JSON respon echo json_encode($respon);
} ?>
8. Buat file hapusmahasiswa.php
<?php
error_reporting(E_ALL ^ E_DEPRECATED);
//koneksi database mysql
$dbhost = "localhost";
$dbuser = "root";
$dbpass = "root";
$dbname = "mahasiswa";
mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($dbname);
//buat array untuk menampung respon dari JSON
$response = array();
// cek apakah variabel idmem sudah terset / terisi if (isset($_POST['idmem'])) {
$idmem = $_POST['idmem'];
// query update member berdasarkan id
$result = mysql_query("DELETE FROM dataprib WHERE id = $idmem");
// jika berhasil di hapus
if (mysql_affected_rows() > 0) { $respon["sukses"] = 1;
$respon["pesan"] = "Data Mahasiswa berhasil dihapus";
// memprint/mencetak JSON respon echo json_encode($respon);
} else {
// jika gagal dihapus $respon["sukses"] = 0;
$respon["pesan"] = "Gagal dihapus";
// memprint/mencetak JSON respon echo json_encode($respon);
} } else {
// jika data tidak terisi/tidak terset $respon["sukses"] = 0;
$respon["pesan"] = "data belum terisi";
// memprint/mencetak JSON respon echo json_encode($respon);
} ?>
9. Simpan kelima file php tersebut dalam folder webserver anda dalam folder newcrudjson.
10. Langkah ketiga dalam Android studio.
11. Buat project baru. Kemudian buat sebuah layout.
12. activity dengan nama halaman_utama.xml. Kodingnya adalah sebagai berikut.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:gravity="center_horizontal">
<!-- Halaman utama Dengan 2 button -->
<!-- Button untuk melihat semua anggota -->
<Button android:id="@+id/btnLihatAnggota"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Lihat Anggota"
android:layout_marginTop="25dip"/>
<!-- Button untuk menambah Data anggota -->
<Button android:id="@+id/btnTambahAnggota"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Tambah Anggota"
android:layout_marginTop="25dip"/>
</LinearLayout>
13. Kemudian buat sebuah activity dengan nama list_item.xml.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<!-- id anggota (idmem) - akan di sembunyikan - digunakan untuk mengirim variabel id ke activity lain -->
<TextView
android:id="@+id/idmem"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:visibility="gone" />
<!-- Name Label -->
<TextView
android:id="@+id/nomhs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingTop="6dip"
android:paddingLeft="6dip"
android:textSize="17dip"
android:textStyle="bold" />
<!-- alamat anggota (alamat) - akan di sembunyikan - digunakan untuk mengirim variabel alamat ke activity lain -->
<TextView
android:id="@+id/ipk"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:visibility="gone" />
</LinearLayout>
14. Kemudian buat sebuah activity dengan nama semua_anggota.xml.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<!-- Main ListView
Jangan lupa selalu berikan id value sebagai list(@android:id/list) -->
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
15. Kemudian buat sebuah activity dengan nama tambah_anggota.xml.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<!-- Label NoMhs -->
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Nomor Mahasiswa"
android:paddingLeft="10dip"
android:paddingRight="10dip"
android:paddingTop="10dip"
android:textSize="17dip"/>
<!-- Input NoMhs -->
<EditText android:id="@+id/inputNomhs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="5dip"
android:layout_marginBottom="15dip"
android:singleLine="true"/>
<!-- Label Nama -->
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Nama Anggota"
android:paddingLeft="10dip"
android:paddingRight="10dip"
android:paddingTop="10dip"
android:textSize="17dip"/>
<!-- Input Nama -->
<EditText android:id="@+id/inputNama"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="5dip"
android:layout_marginBottom="15dip"
android:singleLine="true"/>
<!-- Label Alamat -->
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="IPK"
android:paddingLeft="10dip"
android:paddingRight="10dip"
android:paddingTop="10dip"
android:textSize="17dip"/>
<!-- Input alamat -->
<EditText android:id="@+id/inputIpk"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="5dip"
android:layout_marginBottom="15dip"
android:lines="4"
android:gravity="top"/>
<!-- Button Tambah Anggota -->
<Button android:id="@+id/btnTambahAnggota"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Tambah Anggota"/>
</LinearLayout>
16. Kemudian buat sebuah activity dengan nama edit_anggota.xml.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<!-- Label NoMhs -->
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Nomor Mahasiswa"
android:paddingLeft="10dip"
android:paddingRight="10dip"
android:paddingTop="10dip"
android:textSize="17dip"/>
<!-- Input NoMhs -->
<EditText android:id="@+id/inputNomhs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="5dip"
android:layout_marginBottom="15dip"
android:singleLine="true"/>
<!-- Label Nama -->
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingLeft="10dip"
android:paddingRight="10dip"
android:paddingTop="10dip"
android:text="Nama Anggota"
android:textSize="17dip" />
<!-- Input Nama -->
<EditText
android:id="@+id/inputNama"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="5dip"
android:layout_marginBottom="15dip"
android:singleLine="true" />
<!-- Label Alamat -->
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingLeft="10dip"
android:paddingRight="10dip"
android:paddingTop="10dip"
android:text="Alamat"
android:textSize="17dip" />
<!-- Input alamat -->
<EditText
android:id="@+id/inputIpk"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="5dip"
android:layout_marginBottom="15dip"
android:gravity="top"
android:lines="4" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<!-- Button Update Anggota -->
<Button
android:id="@+id/btnSave"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Simpan" />
<!-- Button Hapus Anggota -->
<Button
android:id="@+id/btnDelete"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Hapus" />
</LinearLayout>
</LinearLayout>
17. Dan tambahkan pada file HalamanUtama.java sehingga menjadi sebagai berikut
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class HalamanUtamaActivity extends Activity { Button btnLihatAnggota;
Button btnTambahAnggota;
@Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.halaman_utama);
// inisialisasi button/tombol
btnLihatAnggota = (Button) findViewById(R.id.btnLihatAnggota);
btnTambahAnggota = (Button) findViewById(R.id.btnTambahAnggota);
// even klik untuk menampilkan class SemuaAnggotaActivity btnLihatAnggota.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View view) {
// Tampilkan semua anggota activity lewat intent Intent i = new Intent(getApplicationContext(), SemuaAnggotaActivity.class);
startActivity(i);
} });
// even klik menampilkan TambahAnggotaACtivity
btnTambahAnggota.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View view) {
// Tampilkan tambah anggota activity lewat intent Intent i = new Intent(getApplicationContext(), TambahAnggotaActivity.class);
startActivity(i);
} });
} }
18. Buat sebuah java class dengan nama JSONParser.java. Kodingnya sebagai berikut.
import android.util.Log;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.List;
public class JSONParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
// constructor
public JSONParser() { }
// fungsi ambil json dari url // lewat method HTTP POST atau GET
public JSONObject makeHttpRequest(String url, String method, List<NameValuePair> params) {
// membuat request HTTP try {
// cek untuk method request if (method == "POST") {
// jika request method adalah POST // defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
} else if (method == "GET") {
// jika request method adalah GET
DefaultHttpClient httpClient = new DefaultHttpClient();
String paramString = URLEncodedUtils.format(params, "utf-8");
url += "?" + paramString;
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
}
} catch (UnsupportedEncodingException e) { e.printStackTrace();
} catch (ClientProtocolException e) { e.printStackTrace();
} catch (IOException e) { e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) { sb.append(line + "\n");
}
is.close();
json = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string menjadi JSON object try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String return jObj;
} }
19. Buat sebuah java class dengan nama SemuaAnggotaActivity.java. Kodingnya sebagai berikut.
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import org.apache.http.NameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class SemuaAnggotaActivity extends ListActivity {
// Progress Dialog
private ProgressDialog pDialog;
// Membuat objek JSONParser
JSONParser jParser = new JSONParser();
ArrayList<HashMap<String, String>> memberList;
// inisialisasi url semuanggota.php
private static String url_semua_anggota = "http://gishiber.akakom.ac.id/
/newcrudjsonphp/semuamahasiswa.php";
// inisialisasi nama node dari json yang dihasilkan oleh php private static final String TAG_SUKSES = "sukses";
private static final String TAG_MEMBER = "member";
private static final String TAG_IDMEM = "id";
private static final String TAG_NOMHS = "nomhs";
private static final String TAG_NAMA = "nama";
// buat JSONArray member JSONArray member = null;
@Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.semua_anggota);
// Hashmap untuk ListView
memberList = new ArrayList<HashMap<String, String>>();
// buat method untuk menampilkan data pada Background Thread new AmbilDataJson().execute();
// ambil listview
ListView lv = getListView();
// pada saat mengklik salah satu nama member // lalu alihkan pada class EditanggotaActivity
lv.setOnItemClickListener(new OnItemClickListener() { @Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// ambil nilai dari ListItem yang dipilih
String idmem = ((TextView) view.findViewById(R.id.idmem)) .getText().toString();
// Starting new intent
Intent in = new Intent(getApplicationContext(), EditAnggotaActivity.class);
// kirim idmem ke activity berikutnya in.putExtra(TAG_IDMEM, idmem);
// mulai activity baru dan dapatkan respon result kode 100 startActivityForResult(in, 100);
} });
}
// Respon dari Edit anggota Activity @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data);
// jika result code 100 if (resultCode == 100) {
// jika result code 100 diterima artinya user mengedit/menghapus member // reload layar ini lagi
Intent intent = getIntent();
finish();
startActivity(intent);
} }
/**
* Background Async Task untuk menampilkan semua data anggota * */
class AmbilDataJson extends AsyncTask<String, String, String> {
// sebelum memulai background thread tampilkan Progress Dialog @Override
protected void onPreExecute() { super.onPreExecute();
pDialog = new ProgressDialog(SemuaAnggotaActivity.this);
pDialog.setMessage("Mengambil Data Anggota. Silahkan Tunggu...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
// mengambil semua data anggota/member dari url protected String doInBackground(String... args) {
// membangun Parameter
List<NameValuePair> params = new ArrayList<NameValuePair>();
// ambil JSON string dari URL
JSONObject json = jParser.makeHttpRequest(url_semua_anggota, "GET", params);
// cek log cat untuk JSON reponse
Log.d("Semua Anggota: ", json.toString());
try {
// mengecek untuk TAG SUKSES
int sukses = json.getInt(TAG_SUKSES);
if (sukses == 1) {
// data ditemukan
// mengambil Array dari member
member = json.getJSONArray(TAG_MEMBER);
// looping data semua member/anggota
for (int i = 0; i < member.length(); i++) { JSONObject c = member.getJSONObject(i);
// tempatkan setiap item json di variabel String id = c.getString(TAG_IDMEM);
String nomhs = c.getString(TAG_NOMHS);
String nama = c.getString(TAG_NAMA);
// buat new HashMap
HashMap<String, String> map = new HashMap<String, String>();
// menambah setiap child node ke HashMap key => value map.put(TAG_IDMEM, id);
map.put(TAG_NOMHS, nomhs);
map.put(TAG_NAMA, nama);
// menambah HashList ke ArrayList memberList.add(map);
} } else {
// tidak ditemukan data anggota/member // Tampilkan layar tambahAnggotaActivity Intent i = new Intent(getApplicationContext(), TambahAnggotaActivity.class);
// tutup semua activity sebelumnya
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
}
} catch (JSONException e) { e.printStackTrace();
}
return null;
}
/**
* setelah menyelesaikan background task hilangkan the progress dialog * **/
protected void onPostExecute(String file_url) {
// hilangkan dialog setelah mendapatkan semua data member pDialog.dismiss();
// update UI dari Background Thread runOnUiThread(new Runnable() { public void run() {
// update hasil parsing JSON ke ListView ListAdapter adapter = new SimpleAdapter(
SemuaAnggotaActivity.this, memberList,
R.layout.list_item, new String[] { TAG_IDMEM,
TAG_NOMHS, TAG_NAMA }, new int[] { R.id.idmem, R.id.nomhs });
// update listview setListAdapter(adapter);
} });
} } }
20. Buat sebuah java class dengan nama TambahAnggotaActivity.java. Kodingnya sebagai berikut.
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
public class TambahAnggotaActivity extends Activity {
// Progress Dialog
private ProgressDialog pDialog;
JSONParser jsonParser = new JSONParser();
EditText inputNomhs;
EditText inputNama;
EditText inputIpk;
// inisialisasi url tambahanggota.php
private static String url_tambah_anggota = "http://gishiber.akakom.ac.id/
/newcrudjsonphp/tambahmahasiswa.php";
// inisialisasi nama node dari json yang dihasilkan oleh php (utk class ini // hanya node "sukses")
private static final String TAG_SUKSES = "sukses";
@Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.tambah_anggota);
// inisialisasi Edit Text
inputNomhs = (EditText) findViewById(R.id.inputNomhs);
inputNama = (EditText) findViewById(R.id.inputNama);
inputIpk = (EditText) findViewById(R.id.inputIpk);
// inisialisasi button
Button btnTambahAnggota = (Button) findViewById(R.id.btnTambahAnggota);
// klik even tombol tambah anggota
btnTambahAnggota.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// buat method pada background thread new BuatAnggotaBaru().execute();
} });
}
/**
* Background Async Task untuk menambah data anggota baru * */
class BuatAnggotaBaru extends AsyncTask<String, String, String> {
// sebelum memulai background thread tampilkan Progress Dialog @Override
protected void onPreExecute() { super.onPreExecute();
pDialog = new ProgressDialog(TambahAnggotaActivity.this);
pDialog.setMessage("Menambah data..silahkan tunggu");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
// menambah data
protected String doInBackground(String... args) { String nomhs = inputNomhs.getText().toString();
String nama = inputNama.getText().toString();
String ipk = inputIpk.getText().toString();
//Double ipk = Double.parseDouble(inputIpk.getText().toString());
// Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("nomhs",nomhs));
params.add(new BasicNameValuePair("nama", nama));
params.add(new BasicNameValuePair("ipk",ipk));
// mengambil JSON Object dengan method POST
JSONObject json = jsonParser.makeHttpRequest(url_tambah_anggota, "POST", params);
// periksa respon log cat
Log.d("Respon tambah anggota", json.toString());
try {
int sukses = json.getInt(TAG_SUKSES);
if (sukses == 1) {
// jika sukses menambah data baru
Intent i = new Intent(getApplicationContext(), SemuaAnggotaActivity.class);
startActivity(i);
// tutup activity ini finish();
} else {
// jika gagal dalam menambah data }
} catch (JSONException e) { e.printStackTrace();
}
return null;
}
protected void onPostExecute(String file_url) {
// hilangkan dialog ketika selesai menambah data baru pDialog.dismiss();
} } }
21. Buat sebuah java class dengan nama EditAnggotaActivity.java. Kodingnya sebagai berikut.
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
public class EditAnggotaActivity extends Activity { EditText txtNomhs;
EditText txtNama;
EditText txtIpk;
Button btnSave;
Button btnDelete;
String idmem;
// Progress Dialog
private ProgressDialog pDialog;
// instansiasi objek JSON parser
JSONParser jsonParser = new JSONParser();
// inisialisasi url
private static final String url_detail_anggota = "http://gishiber.akakom.ac.id/
/newcrudjsonphp/mahasiswadetail.php";
private static final String url_update_anggota = "http://gishiber.akakom.ac.id/
/newcrudjsonphp/updatemahasiswa.php";
private static final String url_delete_anggota = "http://gishiber.akakom.ac.id/
/newcrudjsonphp/hapusmahasiswa.php";
// inisialisasi nama node dari json yang dihasilkan oleh php
private static final String TAG_SUKSES = "sukses";
private static final String TAG_MEMBER = "member";
private static final String TAG_IDMEMBER = "id";
private static final String TAG_NOMHS = "nomhs";
private static final String TAG_NAMA = "nama";
private static final String TAG_IPK = "ipk";
@Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.edit_anggota);
// inisialisasi button
btnSave = (Button) findViewById(R.id.btnSave);
btnDelete = (Button) findViewById(R.id.btnDelete);
// ambil data anggota detail dari intent Intent i = getIntent();
// ambil member id dari intent
idmem = i.getStringExtra(TAG_IDMEMBER);
// buat method ambil detail anggota pada background thread new AmbilDetailAnggota().execute();
// klik even tombol save
btnSave.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View arg0) {
// buat background thread untuk simpan anggota new SimpanAnggotaDetail().execute();
} });
// klik even tombol delete
btnDelete.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View arg0) {
// buat method hapus anggota dalam background thread new HapusAnggota().execute();
} });
}
/**
* Background Async Task untuk menmpilkan data detail anggota * */
class AmbilDetailAnggota extends AsyncTask<String, String, String> {
// Sebelum memulai background thread tampilkan Progress Dialog @Override
protected void onPreExecute() { super.onPreExecute();
pDialog = new ProgressDialog(EditAnggotaActivity.this);
pDialog.setMessage("Mengambil data anggota. Silahkan tunggu...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
/**
* Ambil detail anggota background thread * */
protected String doInBackground(String... params) {
// Cek jika tag sukses bernilai 1 atau 0 int sukses;
try {
// Parameters
List<NameValuePair> params1 = new ArrayList<NameValuePair>();
params1.add(new BasicNameValuePair("idmem", idmem));
// ambil detail anggota dengan request HTTP // dengan menggunakan method GET
JSONObject json = jsonParser.makeHttpRequest(
url_detail_anggota, "GET", params1);
// cek log untuk json respon
Log.d("Mahasiswa Detail", json.toString());
// json sukses tag
sukses = json.getInt(TAG_SUKSES);
if (sukses == 1) {
// sukses mengambil detail anggota
JSONArray memberObj = json.getJSONArray(TAG_MEMBER);
// ambil objek member pertama dari JSON Array
final JSONObject member = memberObj.getJSONObject(0);
// update UI dari Background Thread runOnUiThread(new Runnable() { public void run() {
txtNomhs = (EditText) findViewById(R.id.inputNomhs);
txtNama = (EditText) findViewById(R.id.inputNama);
txtIpk = (EditText) findViewById(R.id.inputIpk);
try {
// tampilkan data member di EditText
txtNomhs.setText(member.getString(TAG_NOMHS));
txtNama.setText(member.getString(TAG_NAMA));
txtIpk.setText(member.getString(TAG_IPK));
} catch (JSONException e) {
// TODO Auto-generated catch block e.printStackTrace();
} } });
} else {
// jika idmem tidak ditemukan }
} catch (JSONException e) { e.printStackTrace();
}
return null;
}
// setelah background task selesai hilangkan progress dialog protected void onPostExecute(String file_url) {
// dismiss dialog setelah mendapatkan data detail anggota pDialog.dismiss();
} }
/**
* Background Async Task untuk menyimpan/mengupdate data anggota * */
class SimpanAnggotaDetail extends AsyncTask<String, String, String> {
// Sebelum memulai background thread tampilkan Progress Dialog @Override
protected void onPreExecute() { super.onPreExecute();
pDialog = new ProgressDialog(EditAnggotaActivity.this);
pDialog.setMessage("Menyimpan Data Anggota ...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
// simpan anggota
protected String doInBackground(String... args) {
// data yang akan diupdate dari EditTexts String nomhs = txtNomhs.getText().toString();
String nama = txtNama.getText().toString();
String ipk = txtIpk.getText().toString();
// Membangun Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("idmem", idmem));
params.add(new BasicNameValuePair("nomhs", nomhs));
params.add(new BasicNameValuePair("nama", nama));
params.add(new BasicNameValuePair("ipk", ipk));
// mengirim data yang diupdate lewat request http // Dengan method POST
JSONObject json = jsonParser.makeHttpRequest(url_update_anggota, "POST", params);
// cek json sukses tag (apakah 1 atau 0)
try {
int sukses = json.getInt(TAG_SUKSES);
if (sukses == 1) {
// sukses mengupdate data Intent i = getIntent();
// kirim result code 100 untuk notifikasi kalau update setResult(100, i);
finish();
} else {
// gagal update data }
} catch (JSONException e) { e.printStackTrace();
}
return null;
}
/**
* setelah update data selesai background task akan menghilangkan * progress dialog
* **/
protected void onPostExecute(String file_url) {
// dismiss dialog ketika selesai pDialog.dismiss();
} }
/**
* Background Async Task untuk menghapus data anggota * */
class HapusAnggota extends AsyncTask<String, String, String> {
// Sebelum memulai background thread Tampilkan Progress Dialog @Override
protected void onPreExecute() { super.onPreExecute();
pDialog = new ProgressDialog(EditAnggotaActivity.this);
pDialog.setMessage("Menghapus data Anggota...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
// menghapus data anggota
protected String doInBackground(String... args) { int sukses;
try {
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("idmem", idmem));
// ambil member/anggota detail dengan request HTTP JSONObject json = jsonParser.makeHttpRequest(
url_delete_anggota, "POST", params);
// cek log untuk json respon
Log.d("Delete Anggota", json.toString());
// json sukses tag
sukses = json.getInt(TAG_SUKSES);
if (sukses == 1) {
// Member sukses di delete
// beritahu activity sebelumnya dengan mengirim result code Intent i = getIntent();
setResult(100, i);
finish();
}
} catch (JSONException e) { e.printStackTrace();
}
return null;
}
/**
* Setelah hapus data selesai background task akan menghilangkan * progress dialog
* **/
protected void onPostExecute(String file_url) {
// dismiss dialog setelah proses hapus selesai pDialog.dismiss();
} } }
22. URL yang dituliskan disini adalah URL untuk aplikasi ini dijalankan di emulator, jika anda jalankan di handphone, maka alamat servernya akan diubah.
23. Daftarkan activity dan permission ke Android Manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="belajar.coba.ningrum.trymsql">
<uses-permission
android:name="android.permission.INTERNET">
</uses-permission>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".EditAnggotaActivity"></activity>
<activity android:name=".SemuaAnggotaActivity"></activity>
<activity android:name=".TambahAnggotaActivity"></activity>
</application>
</manifest>