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. Struktur struktur 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. Langkah 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 autoincrement”, “nomhs tipe varchar”, “nama
tipe varchar”, “ipk tipe double”
3. Langkah kedua, buatlah file php berikut ini.
Buat file semuamahasiswa.php
<?php
$servername = "localhost";
$username = "root";
$password = "root";
$dbname = "mahasiswa";
// menciptakan koneksi
$koneksi = mysqli_connect($servername, $username, $password, $dbname);
// Cek koneksi
if (!$koneksi) {
die("Koneksi gagal: " . mysqli_connect_error());
}
//buat array untuk menampung respon dari JSON
$respon = array();
// query menampilkan semua data member
$sql = "select * from dataprib";
$hasil = mysqli_query($koneksi, $sql);
if (mysqli_num_rows($hasil) > 0) {
// looping semua hasil
// member node
$respon["member"] = array();
while($baris = mysqli_fetch_assoc($hasil)) {
// temp member array
$member = array();
$member["id"] = $row["id"];
$member["nomhs"] = $row["nomhs"];
$member["nama"] = $row["nama"];
$member["ipk"] = $row["ipk"];
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);
}
mysqli_close($koneksi);
?>
Buat file mahasiswadetil.php
<?php
$servername = "localhost";
$username = "root";
$password = "root";
$dbname = "mahasiswa";
// menciptakan koneksi
$koneksi = mysqli_connect($servername, $username, $password, $dbname);
// Cek koneksi
if (!$koneksi) {
die("Koneksi gagal: " . mysqli_connect_error());
}
//buat array untuk menampung respon dari JSON
$respon = array();
// cek apakah variabel idmem sudah terset / sudah ada
if (isset($_GET["idmem"])) {
$idmem = $_GET['idmem'];
// query ambil data member berdasarkan id
$sql = " SELECT * FROM dataprib WHERE id = $idmem ";
$hasil = mysqli_query($koneksi, $sql);
if (!empty($hasil)) {
// jika data member ada (besar dari nol)
if (mysql_num_rows($hasil) > 0) {
$baris = mysqli_fetch_assoc($hasil)
// temp member array
$member = array();
$member["id"] = $baris["id"];
$member["nomhs"] = $baris["nomhs"];
$member["nama"] = $baris["nama"];
$member["ipk"] = $baris["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);
}
mysqli_close($koneksi);
?>
Buat file tambahmahasiswa.php
<?php
$servername = "localhost";
$username = "root";
$password = "root";
$dbname = "mahasiswa";
// menciptakan koneksi
$koneksi = mysqli_connect($servername, $username, $password, $dbname);
// Cek koneksi
if (!$koneksi) {
die("Koneksi gagal: " . mysqli_connect_error());
}
//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
$sql = "INSERT INTO dataprib(nomhs, nama, ipk) VALUES('$nomhs', '$nama',
'$ipk')";
if(mysqli_query($koneksi, $sql)){
// 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);
}
mysqli_close($koneksi);
?>
Buat file updatemahasiswa.php
<?php
//koneksi database mysql
$servername = "localhost";
$username = "root";
$password = "root";
$dbname = "mahasiswa";
// menciptakan koneksi
$koneksi = mysqli_connect($servername, $username, $password, $dbname);
// Cek koneksi
if (!$koneksi) {
die("Koneksi gagal: " . mysqli_connect_error());
}
//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
$sql = "UPDATE dataprib
SET nomhs = '$nomhs',
nama = '$nama',
ipk = '$ipk'
// cek apakah berhasil update atau tidak
if (mysqli_query($koneksi, $sql)) {
// 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);
}
mysqli_close($koneksi);
?>
Buat file hapusmahasiswa.php
<?php
//koneksi database mysql
$servername = "localhost";
$username = "root";
$password = "root";
$dbname = "mahasiswa";
// menciptakan koneksi
$koneksi = mysqli_connect($servername, $username, $password, $dbname);
// Cek koneksi
if (!$koneksi) {
die("Koneksi gagal: " . mysqli_connect_error());
}
//buat array untuk menampung respon dari JSON
$response = array();
// cek apakah variabel idmem sudah terset / terisi
if (isset($_POST['idmem'])) {
$idmem = $_POST['idmem'];
// query delete member berdasarkan id
$result = mysql_query("DELETE FROM dataprib WHERE id = $idmem");
$sql = "DELETE FROM dataprib WHERE id = $idmem";
// cek apakah berhasil delete atau tidak
if (mysqli_query($koneksi, $sql)) {
// jika berhasil di hapus
$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);
}
?>
Simpan kelima file php tersebut dalam folder webserver anda dalam folder newcrudjson.
4. Langkah ketiga dalam Android studio.
Buat project baru. Kemudian buat sebuah layout.
activity dengan nama halaman_utama.xml. Kodenya 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>
5. Kemudian buat sebuah layout 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>
6. Kemudian buat sebuah layout 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>
7. Kemudian buat sebuah layout 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 -->
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>
8. Kemudian buat sebuah layout 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>
9. 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); } }); } }
10. 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;
} }
11. Buat sebuah java class dengan nama SemuaAnggotaActivity.java. Kodenya 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_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>();
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); } }); } } }
12. 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(); } } }
13. Buat sebuah java class dengan nama EditAnggotaActivity.java. Kodenya 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
// 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("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();
} } }
URL yang dituliskan disini adalah URL untuk aplikasi yang dijalankan di emulator, jika anda
jalankan di handphone, maka alamat servernya akan diubah.
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>