SlideShare une entreprise Scribd logo
1  sur  23
Télécharger pour lire hors ligne
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 :
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'];
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 */
@$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 {
echo mysql_error();
}
break;
default:
break;
}
?>
Android
Android - main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:orientation="vertical"
tools:context=".MainActivity" >
<Button
android:id="@+id/buttonTambahBiodata"
android:layout_width="186dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
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;
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];
}
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) {
throw new IOException("Error connecting2");
}
return in;
}
}
Android - Biodata.java
Path : src/jhohannes.purba/Koneksi.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package jhohannes.purba;
public class Biodata extends Koneksi {
String URL = "http://10.0.2.2/tips_crud_android_json_mysql/server.php";
String url = "";
String response = "";
public String tampilBiodata() {
try {
url = URL + "?operasi=view";
System.out.println("URL Tampil Biodata: " + url);
response = call(url);
} catch (Exception e) {
}
return response;
}
public String inserBiodata(String nama, String alamat) {
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
try {
url = URL + "?operasi=insert&nama=" + nama + "&alamat=" + alamat;
System.out.println("URL Insert Biodata : " + url);
response = call(url);
} catch (Exception e) {
}
return response;
}
public String getBiodataById(int id) {
try {
url = URL + "?operasi=get_biodata_by_id&id=" + id;
System.out.println("URL Insert Biodata : " + url);
response = call(url);
} catch (Exception e) {
}
return response;
}
public String updateBiodata(String id, String nama, String alamat) {
try {
url = URL + "?operasi=update&id=" + id + "&nama=" + nama + "&alamat=" + alamat;
System.out.println("URL Insert Biodata : " + url);
response = call(url);
} catch (Exception e) {
}
return response;
}
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;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.view.ViewPager.LayoutParams;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity implements OnClickListener {
Biodata biodata = new Biodata();
TableLayout tabelBiodata;
Button buttonTambahBiodata;
ArrayList<Button> buttonEdit = new ArrayList<Button>();
ArrayList<Button> buttonDelete = new ArrayList<Button>();
JSONArray arrayBiodata;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tabelBiodata = (TableLayout) findViewById(R.id.tableBiodata);
buttonTambahBiodata = (Button) findViewById(R.id.buttonTambahBiodata);
buttonTambahBiodata.setOnClickListener(this);
TableRow barisTabel = new TableRow(this);
barisTabel.setBackgroundColor(Color.CYAN);
TextView viewHeaderId = new TextView(this);
TextView viewHeaderNama = new TextView(this);
TextView viewHeaderAlamat = new TextView(this);
TextView viewHeaderAction = new TextView(this);
viewHeaderId.setText("ID");
viewHeaderNama.setText("Nama");
viewHeaderAlamat.setText("Alamat");
viewHeaderAction.setText("Action");
viewHeaderId.setPadding(5, 1, 5, 1);
viewHeaderNama.setPadding(5, 1, 5, 1);
viewHeaderAlamat.setPadding(5, 1, 5, 1);
viewHeaderAction.setPadding(5, 1, 5, 1);
barisTabel.addView(viewHeaderId);
barisTabel.addView(viewHeaderNama);
barisTabel.addView(viewHeaderAlamat);
barisTabel.addView(viewHeaderAction);
tabelBiodata.addView(barisTabel, new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
try {
arrayBiodata = new JSONArray(biodata.tampilBiodata());
for (int i = 0; i < arrayBiodata.length(); i++) {
JSONObject jsonChildNode = arrayBiodata.getJSONObject(i);
String name = jsonChildNode.optString("nama");
String alamat = jsonChildNode.optString("Alamat");
String id = jsonChildNode.optString("id");
System.out.println("Nama :" + name);
System.out.println("Alamat :" + alamat);
System.out.println("ID :" + id);
barisTabel = new TableRow(this);
if (i % 2 == 0) {
barisTabel.setBackgroundColor(Color.LTGRAY);
}
TextView viewId = new TextView(this);
viewId.setText(id);
viewId.setPadding(5, 1, 5, 1);
barisTabel.addView(viewId);
TextView viewNama = new TextView(this);
viewNama.setText(name);
viewNama.setPadding(5, 1, 5, 1);
barisTabel.addView(viewNama);
TextView viewAlamat = new TextView(this);
viewAlamat.setText(alamat);
viewAlamat.setPadding(5, 1, 5, 1);
barisTabel.addView(viewAlamat);
buttonEdit.add(i, new Button(this));
buttonEdit.get(i).setId(Integer.parseInt(id));
buttonEdit.get(i).setTag("Edit");
buttonEdit.get(i).setText("Edit");
buttonEdit.get(i).setOnClickListener(this);
barisTabel.addView(buttonEdit.get(i));
buttonDelete.add(i, new Button(this));
buttonDelete.get(i).setId(Integer.parseInt(id));
buttonDelete.get(i).setTag("Delete");
buttonDelete.get(i).setText("Delete");
buttonDelete.get(i).setOnClickListener(this);
barisTabel.addView(buttonDelete.get(i));
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();
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;
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);
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
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) {
String nama = editNama.getText().toString();
String alamat = editAlamat.getText().toString();
System.out.println("Nama : " + nama + " Alamat : " + alamat);
String laporan = biodata.inserBiodata(nama, alamat);
Toast.makeText(MainActivity.this, laporan, Toast.LENGTH_SHORT).show();
/* restart acrtivity */
finish();
startActivity(getIntent());
}
});
builderInsertBiodata.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builderInsertBiodata.show();
}
}
Untuk hasil running bisa lihat gambar di bawah ini…
Inilah hasih project yang saya kerjakan..

Contenu connexe

Tendances

Юнит тестирование в Zend Framework 2.0
Юнит тестирование в Zend Framework 2.0Юнит тестирование в Zend Framework 2.0
Юнит тестирование в Zend Framework 2.0
zfconfua
 
Php codigos interfaces fredy guzman cusihunca
Php codigos interfaces   fredy guzman cusihuncaPhp codigos interfaces   fredy guzman cusihunca
Php codigos interfaces fredy guzman cusihunca
Tigger_Fred
 
Quiz Component For Joomla
Quiz Component For JoomlaQuiz Component For Joomla
Quiz Component For Joomla
guestebb21a
 

Tendances (19)

1- Sourcecode Array
1- Sourcecode Array1- Sourcecode Array
1- Sourcecode Array
 
Blog 4
Blog 4Blog 4
Blog 4
 
Юнит тестирование в Zend Framework 2.0
Юнит тестирование в Zend Framework 2.0Юнит тестирование в Zend Framework 2.0
Юнит тестирование в Zend Framework 2.0
 
Working With Ajax Frameworks
Working With Ajax FrameworksWorking With Ajax Frameworks
Working With Ajax Frameworks
 
es6.concurrency()
es6.concurrency()es6.concurrency()
es6.concurrency()
 
Php codigos interfaces fredy guzman cusihunca
Php codigos interfaces   fredy guzman cusihuncaPhp codigos interfaces   fredy guzman cusihunca
Php codigos interfaces fredy guzman cusihunca
 
Minishell
MinishellMinishell
Minishell
 
Як досвід компанії перетворився на фреймворк
Як досвід компанії перетворився на фреймворкЯк досвід компанії перетворився на фреймворк
Як досвід компанії перетворився на фреймворк
 
Index2
Index2Index2
Index2
 
Javascript and jQuery for Mobile
Javascript and jQuery for MobileJavascript and jQuery for Mobile
Javascript and jQuery for Mobile
 
Peek inside the fantastical Ukrainian Village home and studio of artists Jare...
Peek inside the fantastical Ukrainian Village home and studio of artists Jare...Peek inside the fantastical Ukrainian Village home and studio of artists Jare...
Peek inside the fantastical Ukrainian Village home and studio of artists Jare...
 
Jquery2
Jquery2Jquery2
Jquery2
 
Symfony2でMongoDBと仲良くする方法
Symfony2でMongoDBと仲良くする方法Symfony2でMongoDBと仲良くする方法
Symfony2でMongoDBと仲良くする方法
 
Quiz Component For Joomla
Quiz Component For JoomlaQuiz Component For Joomla
Quiz Component For Joomla
 
A z railphp v1.0
A z railphp v1.0A z railphp v1.0
A z railphp v1.0
 
Here's the Downtown Sound lineup for 2015
Here's the Downtown Sound lineup for 2015Here's the Downtown Sound lineup for 2015
Here's the Downtown Sound lineup for 2015
 
KvZ Web Tasarım Hizmetleri
KvZ Web Tasarım HizmetleriKvZ Web Tasarım Hizmetleri
KvZ Web Tasarım Hizmetleri
 
jQuery入門
jQuery入門jQuery入門
jQuery入門
 
Get more votes!
Get more votes!Get more votes!
Get more votes!
 

Plus de iswan_di (20)

Sv
SvSv
Sv
 
Scroll view
Scroll viewScroll view
Scroll view
 
Csa
CsaCsa
Csa
 
Blog 10
Blog 10Blog 10
Blog 10
 
Demo aplikasi
Demo aplikasiDemo aplikasi
Demo aplikasi
 
Blog 8
Blog 8Blog 8
Blog 8
 
Tugas uts
Tugas utsTugas uts
Tugas uts
 
Penambahan menu atau tampilan
Penambahan menu atau tampilanPenambahan menu atau tampilan
Penambahan menu atau tampilan
 
Next client server
Next client serverNext client server
Next client server
 
Login client server
Login client serverLogin client server
Login client server
 
Membuat aplikasi mengenal tanaman obat tradisional
Membuat aplikasi mengenal tanaman obat tradisionalMembuat aplikasi mengenal tanaman obat tradisional
Membuat aplikasi mengenal tanaman obat tradisional
 
Membuat text to speech pada android
Membuat text to speech pada androidMembuat text to speech pada android
Membuat text to speech pada android
 
Membuat text to speech pada android
Membuat text to speech pada androidMembuat text to speech pada android
Membuat text to speech pada android
 
Membuat perhitungan luas persegi panjang pada adt
Membuat perhitungan luas persegi panjang pada adtMembuat perhitungan luas persegi panjang pada adt
Membuat perhitungan luas persegi panjang pada adt
 
Membuat menu group pada android
Membuat menu group pada androidMembuat menu group pada android
Membuat menu group pada android
 
Membuat spinner array pada adt
Membuat spinner array pada adtMembuat spinner array pada adt
Membuat spinner array pada adt
 
Membuat tampilan list array adapter menggunakan adt
Membuat tampilan list array adapter menggunakan adtMembuat tampilan list array adapter menggunakan adt
Membuat tampilan list array adapter menggunakan adt
 
Form login dengan eclipse android sdk dan adt
Form login dengan eclipse android sdk dan adtForm login dengan eclipse android sdk dan adt
Form login dengan eclipse android sdk dan adt
 
Sq lite
Sq liteSq lite
Sq lite
 
Text to speech
Text to speechText to speech
Text to speech
 

Assalamualaykum warahmatullahi wabarakatuu

  • 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 {
  • 5. echo mysql_error(); } break; default: break; } ?> Android Android - main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center" android:orientation="vertical" tools:context=".MainActivity" > <Button android:id="@+id/buttonTambahBiodata" android:layout_width="186dp" android:layout_height="wrap_content" android:layout_gravity="center"
  • 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) {
  • 9. throw new IOException("Error connecting2"); } return in; } } Android - Biodata.java Path : src/jhohannes.purba/Koneksi.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 package jhohannes.purba; public class Biodata extends Koneksi { String URL = "http://10.0.2.2/tips_crud_android_json_mysql/server.php"; String url = ""; String response = ""; public String tampilBiodata() { try { url = URL + "?operasi=view"; System.out.println("URL Tampil Biodata: " + url); response = call(url); } catch (Exception e) { } return response; } public String inserBiodata(String nama, String alamat) {
  • 10. 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 try { url = URL + "?operasi=insert&nama=" + nama + "&alamat=" + alamat; System.out.println("URL Insert Biodata : " + url); response = call(url); } catch (Exception e) { } return response; } public String getBiodataById(int id) { try { url = URL + "?operasi=get_biodata_by_id&id=" + id; System.out.println("URL Insert Biodata : " + url); response = call(url); } catch (Exception e) { } return response; } public String updateBiodata(String id, String nama, String alamat) { try { url = URL + "?operasi=update&id=" + id + "&nama=" + nama + "&alamat=" + alamat; System.out.println("URL Insert Biodata : " + url); response = call(url); } catch (Exception e) { } return response; }
  • 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;
  • 12. import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.graphics.Color; import android.os.Bundle; import android.support.v4.view.ViewPager.LayoutParams; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TableLayout; import android.widget.TableRow; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity implements OnClickListener { Biodata biodata = new Biodata(); TableLayout tabelBiodata; Button buttonTambahBiodata; ArrayList<Button> buttonEdit = new ArrayList<Button>(); ArrayList<Button> buttonDelete = new ArrayList<Button>(); JSONArray arrayBiodata;
  • 13. @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); tabelBiodata = (TableLayout) findViewById(R.id.tableBiodata); buttonTambahBiodata = (Button) findViewById(R.id.buttonTambahBiodata); buttonTambahBiodata.setOnClickListener(this); TableRow barisTabel = new TableRow(this); barisTabel.setBackgroundColor(Color.CYAN); TextView viewHeaderId = new TextView(this); TextView viewHeaderNama = new TextView(this); TextView viewHeaderAlamat = new TextView(this); TextView viewHeaderAction = new TextView(this); viewHeaderId.setText("ID"); viewHeaderNama.setText("Nama"); viewHeaderAlamat.setText("Alamat"); viewHeaderAction.setText("Action"); viewHeaderId.setPadding(5, 1, 5, 1); viewHeaderNama.setPadding(5, 1, 5, 1); viewHeaderAlamat.setPadding(5, 1, 5, 1); viewHeaderAction.setPadding(5, 1, 5, 1); barisTabel.addView(viewHeaderId);
  • 14. barisTabel.addView(viewHeaderNama); barisTabel.addView(viewHeaderAlamat); barisTabel.addView(viewHeaderAction); tabelBiodata.addView(barisTabel, new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); try { arrayBiodata = new JSONArray(biodata.tampilBiodata()); for (int i = 0; i < arrayBiodata.length(); i++) { JSONObject jsonChildNode = arrayBiodata.getJSONObject(i); String name = jsonChildNode.optString("nama"); String alamat = jsonChildNode.optString("Alamat"); String id = jsonChildNode.optString("id"); System.out.println("Nama :" + name); System.out.println("Alamat :" + alamat); System.out.println("ID :" + id); barisTabel = new TableRow(this); if (i % 2 == 0) { barisTabel.setBackgroundColor(Color.LTGRAY); } TextView viewId = new TextView(this);
  • 15. viewId.setText(id); viewId.setPadding(5, 1, 5, 1); barisTabel.addView(viewId); TextView viewNama = new TextView(this); viewNama.setText(name); viewNama.setPadding(5, 1, 5, 1); barisTabel.addView(viewNama); TextView viewAlamat = new TextView(this); viewAlamat.setText(alamat); viewAlamat.setPadding(5, 1, 5, 1); barisTabel.addView(viewAlamat); buttonEdit.add(i, new Button(this)); buttonEdit.get(i).setId(Integer.parseInt(id)); buttonEdit.get(i).setTag("Edit"); buttonEdit.get(i).setText("Edit"); buttonEdit.get(i).setOnClickListener(this); barisTabel.addView(buttonEdit.get(i)); buttonDelete.add(i, new Button(this)); buttonDelete.get(i).setId(Integer.parseInt(id)); buttonDelete.get(i).setTag("Delete"); buttonDelete.get(i).setText("Delete"); buttonDelete.get(i).setOnClickListener(this); barisTabel.addView(buttonDelete.get(i));
  • 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) {
  • 21. String nama = editNama.getText().toString(); String alamat = editAlamat.getText().toString(); System.out.println("Nama : " + nama + " Alamat : " + alamat); String laporan = biodata.inserBiodata(nama, alamat); Toast.makeText(MainActivity.this, laporan, Toast.LENGTH_SHORT).show(); /* restart acrtivity */ finish(); startActivity(getIntent()); } }); builderInsertBiodata.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); builderInsertBiodata.show(); } }
  • 22. Untuk hasil running bisa lihat gambar di bawah ini…
  • 23. Inilah hasih project yang saya kerjakan..