• Tidak ada hasil yang ditemukan

PERTEMUAN KE 14 Aplikasi dengan Database MySQL

N/A
N/A
Protected

Academic year: 2021

Membagikan "PERTEMUAN KE 14 Aplikasi dengan Database MySQL"

Copied!
21
0
0

Teks penuh

(1)

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:  

(2)

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. 

(3)

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"];

(4)

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

(5)

//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')";

(6)

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'

(7)

// 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)) {

(8)

// 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"

(9)

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 -->

(10)

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 -->

(11)

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

(12)

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

(13)

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

(14)

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

(15)

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. 

(16)

 

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

(17)

//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

(18)

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

(19)

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

(20)

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

(21)

}

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>

 

14. Coba jalankan dan amati hasilnya. Jelaskan jalannya program. 

 

D. LATIHAN 

• Latihan diberikan oleh dosen pengampu pada saat praktikum.

• Dikerjakan di laboratorium pada jam praktikum.

E. TUGAS  

• Tugas diberikan oleh dosen pengampu pada akhir praktikum.

• Dikerjakan di rumah dan dilampirkan pada laporan.

Gambar

Gambar Nilai JSON

Referensi

Dokumen terkait

Epitel simpleks (Epitel pipih selapis). Ciri-cirinya, sitoplasma jernih, inti sel bulat terletak di tengah. Epitel ini terletak di pleura, alveolus paru-paru, kapsul bowman

Hal ini di samping akan memudahkan dalam pelaksanaan penyusunan proposal, proses pembimbingan serta dalam penyusunan laporan hasil penelitian, juga memotivasi para

Bagi peserta KTI online yang dapat menyelesaikan karya tulis ilmiah akan mendapatkan surat pengesahan yang ditandatangani oleh Kepala PPPPTK TK dan PLB,

Dewasa ini cosplayer kerap membuat kostum dari animasi yang populer genre adventure dikarenakan animasi tersebut memiliki desain karakter dengan busana armor (baju

Serbuk koproses PPS-MC (4:1) memiliki ukuran yang lebih besar dari serbuk koproses lainnya dan memiliki morfologi yang agak lebih mirip PPS dengan serpihan berukuran agak

Rekomendasikan menurunkan Angka Kematian Ibu (AKI) berdasarkan hasil analisis faktor manajemen program kesehatan ibu puskesmas di Kabupaten Jember Tahun 2018 terdiri dari:

5 Tahun 1969 yang telah diganti dengan Undang-Undang Pokok Kehutanan (UUPK) No. 167) , dalam Penjelasan Umum disebutkan bahwa sejalan dengan Pasal 33 UUD 1945 sebagai

- merujuk kepada syarikat yang mengeluarkan produk yang sama dan dijual dalam pasaran yang sama dengan produk usahawan4. - pesaing boleh memberi sumbangan dari segi meningkatkan