1. Assalamualaykum Warahmatullahi Wabarakatuu..
Pada laporan ke-dua kali ini, saya akan menjelaskan tentang client server (Insert,
Update, Delete, View (CRUD) Android Mysql Dengan PHP dan JSON database).
Persiapan :
A. Database
Buka localhost/phpmyadmin
Buat database dengan nama tips_crud_android_json_mysql
B. PHP
Buka folder htdocs ( C : xampp/htdocs )
Buat sebuah folder bernama tips_crud_android_json_mysql
di dalam folder tips_crud_android_json_mysql, buat sebuah file dengan
nama server.php
C. Android
Buat sebuah project (File -> New Android Application) dan beri nama Tips-
Crud_Android_JSON_MySql
Pada lokasi src pastikan sudah ada file :
a. MainActivity.java
b. Koneksi.Java
c. Biodata.java
Database
Ekseskusi query ini untuk membuat tabel_biodata
CREATE TABLE IF NOT EXISTS `tabel_biodata` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nama` varchar(50) NOT NULL,
`alamat` varchar(200) NOT NULL,
PRIMARY KEY (`id`)
)
Masukkan data dengan mengeksekusi query berikut :
2. INSERT INTO `tabel_biodata` (`id`, `nama`, `alamat`) VALUES
(1, 'Jhohannes H Purba', 'Kabanjahe'),
(2, 'Berkat Junaidi Banurea', 'Sidikalang'),
(3, 'Totok BluesMan Silalahi', 'Medan');
Jika dibrowse, maka hasilnya akan kelihatan seperti gambar berikut :
PHP - server.php
Buka server.php yang berada di
lokasi C:xampphtdocstips_crud_android_json_mysqlserver.php, lalu ketikkan source code
berikut :
<?php
$server = "localhost";
$username = "root";
$password = "";
$database = "tips_crud_android_json_mysql";
mysql_connect($server, $username, $password) or die("<h1>Koneksi Mysql Error : </h1>" . mysql_error());
mysql_select_db($database) or die("<h1>Koneksi Kedatabase Error : </h1>" . mysql_error());
@$operasi = $_GET['operasi'];
3. switch ($operasi) {
case "view":
/* Source code untuk Menampilkan Biodata *
$query_tampil_biodata = mysql_query("SELECT * FROM tabel_biodata") or die(mysql_error());
$data_array = array();
while ($data = mysql_fetch_assoc($query_tampil_biodata)) {
$data_array[] = $data;
}
echo json_encode($data_array);
//print json_encode($data_array);
//[{"id":"1","nama":"Jhohannes H Purba","alamat":"Kabanjahe"},{"id":"2","nama":"Berkat Junaidi Banure
break;
case "insert":
/* Source code untuk Insert data */
@$nama = $_GET['nama'];
@$alamat = $_GET['alamat'];
$query_insert_data = mysql_query("INSERT INTO tabel_biodata (nama, alamat) VALUES('$nama', '$alam
if ($query_insert_data) {
echo "Data Berhasil Disimpan";
} else {
echo "Error Inser Biodata " . mysql_error();
}
break;
case "get_biodata_by_id":
/* Source code untuk Edit data dan mengirim data berdasarkan id yang diminta */
4. @$id = $_GET['id'];
$query_tampil_biodata = mysql_query("SELECT * FROM tabel_biodata WHERE id='$id'") or die(mysql_
$data_array = array();
$data_array = mysql_fetch_assoc($query_tampil_biodata);
echo "[" . json_encode($data_array) . "]";
break;
case "update":
/* Source code untuk Update Biodata */
@$nama = $_GET['nama'];
@$alamat = $_GET['alamat'];
@$id = $_GET['id'];
$query_update_biodata = mysql_query("UPDATE tabel_biodata SET nama='$nama', alamat='$alamat' WH
if ($query_update_biodata) {
echo "Update Data Berhasil";
} else {
echo mysql_error();
}
break;
case "delete":
/* Source code untuk Delete Biodata */
@$id = $_GET['id'];
$query_delete_biodata = mysql_query("DELETE FROM tabel_biodata WHERE id='$id'");
if ($query_delete_biodata) {
echo "Delete Data Berhasil";
} else {
6. android:text="Tambah Biodata" />
<HorizontalScrollView
android:id="@+id/horizontalScrollView"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<ScrollView
android:id="@+id/verticalScrollView"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<TableLayout
android:id="@+id/tableBiodata"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="80dp" >
</TableLayout>
</ScrollView>
</HorizontalScrollView>
</LinearLayout>
Pada layout saya membuat TableLayout berada pada VerticalScrollView di dalamScrollView, ini berfungsi agar
yang memiliki lebar lebih dari ukuran layar secara otomoatis terscroll sehingga data semua bisa kelihatan.
Android - Koneksi.java
Path : src/jhohannes.purba/Koneksi.java
package jhohannes.purba;
7. import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
public class Koneksi {
public String call(String url) {
int BUFFER_SIZE = 2000;
InputStream in = null;
try {
in = OpenHttpConnection(url);
} catch (IOException e) {
e.printStackTrace();
return "";
}
InputStreamReader isr = new InputStreamReader(in);
int charRead;
String str = "";
char[] inputBuffer = new char[BUFFER_SIZE];
try {
while ((charRead = isr.read(inputBuffer)) > 0) {
String readString = String.copyValueOf(inputBuffer, 0, charRead);
str += readString;
inputBuffer = new char[BUFFER_SIZE];
8. }
in.close();
} catch (IOException e) {
// Handle Exception
e.printStackTrace();
return "";
}
return str;
}
private InputStream OpenHttpConnection(String url) throws IOException {
InputStream in = null;
int response = -1;
URL url1 = new URL(url);
URLConnection conn = url1.openConnection();
if (!(conn instanceof HttpURLConnection))
throw new IOException("Not An Http Connection");
try {
HttpURLConnection httpconn = (HttpURLConnection) conn;
httpconn.setAllowUserInteraction(false);
httpconn.setInstanceFollowRedirects(true);
httpconn.setRequestMethod("GET");
httpconn.connect();
response = httpconn.getResponseCode();
if (response == HttpURLConnection.HTTP_OK) {
in = httpconn.getInputStream();
}
} catch (Exception e) {
11. 47
48
49
50
51
52
53
54
55
56
57
58
public String deleteBiodata(int id) {
try {
url = URL + "?operasi=delete&id=" + id;
System.out.println("URL Insert Biodata : " + url);
response = call(url);
} catch (Exception e) {
}
return response;
}
}
Method yang ada dalam class ini akan membentuk url yang selanjutnya akan dikirim ke Server (
Perhatikan URL yang dicoba di Browser sebelumnya). setelah url dieksekusi maka output yang
terlihat di browser akan ditangkap oleh Method ini, kemudian hasilnya akan dikirim kepada
yang memanggil.
Android - MainActivity.java
Path : src/jhohannes.purba/MainActivity.java
package jhohannes.purba;
import java.util.ArrayList;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
16. tabelBiodata.addView(barisTabel, new TableLayout.LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT));
}
} catch (JSONException e) {
e.printStackTrace();
}
}
public void onClick(View view) {
if (view.getId() == R.id.buttonTambahBiodata) {
// Toast.makeText(MainActivity.this, "Button Tambah Data",
// Toast.LENGTH_SHORT).show();
tambahBiodata();
} else {
/*
* Melakukan pengecekan pada data array, agar sesuai dengan index
* masing-masing button
*/
for (int i = 0; i < buttonEdit.size(); i++) {
/* jika yang diklik adalah button edit */
if (view.getId() == buttonEdit.get(i).getId() && view.getTag().toString().trim().equals("Edit")) {
// Toast.makeText(MainActivity.this, "Edit : " +
// buttonEdit.get(i).getId(), Toast.LENGTH_SHORT).show();
int id = buttonEdit.get(i).getId();
17. getDataByID(id);
} /* jika yang diklik adalah button delete */
else if (view.getId() == buttonDelete.get(i).getId() && view.getTag().toString().trim().equals("Delete")) {
// Toast.makeText(MainActivity.this, "Delete : " +
// buttonDelete.get(i).getId(), Toast.LENGTH_SHORT).show();
int id = buttonDelete.get(i).getId();
deleteBiodata(id);
}
}
}
}
public void deleteBiodata(int id) {
biodata.deleteBiodata(id);
/* restart acrtivity */
finish();
startActivity(getIntent());
}
public void getDataByID(int id) {
String namaEdit = null, alamatEdit = null;
JSONArray arrayPersonal;
18. try {
arrayPersonal = new JSONArray(biodata.getBiodataById(id));
for (int i = 0; i < arrayPersonal.length(); i++) {
JSONObject jsonChildNode = arrayPersonal.getJSONObject(i);
namaEdit = jsonChildNode.optString("nama");
alamatEdit = jsonChildNode.optString("alamat");
}
} catch (JSONException e) {
e.printStackTrace();
}
LinearLayout layoutInput = new LinearLayout(this);
layoutInput.setOrientation(LinearLayout.VERTICAL);
// buat id tersembunyi di alertbuilder
final TextView viewId = new TextView(this);
viewId.setText(String.valueOf(id));
viewId.setTextColor(Color.TRANSPARENT);
layoutInput.addView(viewId);
final EditText editNama = new EditText(this);
editNama.setText(namaEdit);
layoutInput.addView(editNama);
final EditText editAlamat = new EditText(this);
editAlamat.setText(alamatEdit);
19. layoutInput.addView(editAlamat);
AlertDialog.Builder builderEditBiodata = new AlertDialog.Builder(this);
builderEditBiodata.setIcon(R.drawable.batagrams);
builderEditBiodata.setTitle("Update Biodata");
builderEditBiodata.setView(layoutInput);
builderEditBiodata.setPositiveButton("Update", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String nama = editNama.getText().toString();
String alamat = editAlamat.getText().toString();
System.out.println("Nama : " + nama + " Alamat : " + alamat);
String laporan = biodata.updateBiodata(viewId.getText().toString(), editNama.getText().toString(),
editAlamat.getText().toString());
Toast.makeText(MainActivity.this, laporan, Toast.LENGTH_SHORT).show();
/* restart acrtivity */
finish();
startActivity(getIntent());
}
});
builderEditBiodata.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
20. public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builderEditBiodata.show();
}
public void tambahBiodata() {
/* layout akan ditampilkan pada AlertDialog */
LinearLayout layoutInput = new LinearLayout(this);
layoutInput.setOrientation(LinearLayout.VERTICAL);
final EditText editNama = new EditText(this);
editNama.setHint("Nama");
layoutInput.addView(editNama);
final EditText editAlamat = new EditText(this);
editAlamat.setHint("Alamat");
layoutInput.addView(editAlamat);
AlertDialog.Builder builderInsertBiodata = new AlertDialog.Builder(this);
builderInsertBiodata.setIcon(R.drawable.batagrams);
builderInsertBiodata.setTitle("Insert Biodata");
builderInsertBiodata.setView(layoutInput);
builderInsertBiodata.setPositiveButton("Insert", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {