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 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"]; //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); } mysqli_close($koneksi); ?>
Buat file mahasiswadetil.php 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
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
// query update berdasarkan id $sql = "UPDATE dataprib SET nomhs = '$nomhs', nama = '$nama', ipk = '$ipk' WHERE id = $idmem";
// 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
// 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.
<Button android:id="@+id/btnLihatAnggota" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Lihat Anggota" android:layout_marginTop="25dip"/> <Button android:id="@+id/btnTambahAnggota" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Tambah Anggota" android:layout_marginTop="25dip"/>
5. Kemudian buat sebuah layout dengan nama list_item.xml.
android:visibility="gone" />
6. Kemudian buat sebuah layout dengan nama semua_anggota.xml.
7. Kemudian buat sebuah layout dengan nama tambah_anggota.xml.
<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"/> <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"/> <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 android:id="@+id/btnTambahAnggota" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Tambah Anggota"/>
8. Kemudian buat sebuah layout dengan nama edit_anggota.xml.
<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"/> <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" />
<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" /> <Button android:id="@+id/btnSave" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="Simpan" /> <Button android:id="@+id/btnDelete" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="Hapus" />
9. Dan tambahkan pada file HalamanUtama.java sehingga menjadi sebagai berikut import import import import import
android.app.Activity; android.content.Intent; android.os.Bundle; android.view.View; 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 import import import import import import import import import import
org.apache.http.HttpEntity; org.apache.http.HttpResponse; org.apache.http.NameValuePair; org.apache.http.client.ClientProtocolException; org.apache.http.client.entity.UrlEncodedFormEntity; org.apache.http.client.methods.HttpGet; org.apache.http.client.methods.HttpPost; org.apache.http.client.utils.URLEncodedUtils; org.apache.http.impl.client.DefaultHttpClient; org.json.JSONException; org.json.JSONObject;
import import import import import import
java.io.BufferedReader; java.io.IOException; java.io.InputStream; java.io.InputStreamReader; java.io.UnsupportedEncodingException; 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
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 import import import import import import import import import import import import
android.app.ListActivity; android.app.ProgressDialog; android.content.Intent; android.os.AsyncTask; android.os.Bundle; android.util.Log; android.view.View; android.widget.AdapterView; android.widget.AdapterView.OnItemClickListener; android.widget.ListAdapter; android.widget.ListView; android.widget.SimpleAdapter; android.widget.TextView;
import import import import
org.apache.http.NameValuePair; org.json.JSONArray; org.json.JSONException; 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> 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>(); // 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 params = new ArrayList(); // 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); } }); } } }
12. Buat sebuah java class dengan nama TambahAnggotaActivity.java. Kodingnya sebagai berikut.
import import import import import import import import import
android.app.Activity; android.app.ProgressDialog; android.content.Intent; android.os.AsyncTask; android.os.Bundle; android.util.Log; android.view.View; android.widget.Button; android.widget.EditText;
import import import import
org.apache.http.NameValuePair; org.apache.http.message.BasicNameValuePair; org.json.JSONException; 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 params = new ArrayList(); 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 import import import import import import import import
android.app.Activity; android.app.ProgressDialog; android.content.Intent; android.os.AsyncTask; android.os.Bundle; android.util.Log; android.view.View; android.widget.Button; android.widget.EditText;
import import import import import
org.apache.http.NameValuePair; org.apache.http.message.BasicNameValuePair; org.json.JSONArray; org.json.JSONException; 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 private static final private static final private static final private static final private static final private static final
node dari json yang dihasilkan oleh php String TAG_SUKSES = "sukses"; String TAG_MEMBER = "member"; String TAG_IDMEMBER = "id"; String TAG_NOMHS = "nomhs"; String TAG_NAMA = "nama"; 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 params1 = new ArrayList(); 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 params = new ArrayList(); 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 params = new ArrayList(); 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 <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="belajar.coba.ningrum.trymsql"> <uses-permission android:name="android.permission.INTERNET">
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.