Persiapan
*Database
buka localhost/phpmyadmin. perharikan gambar berikut
setelah itu buatkan database dengan nama crud_android. perhatikan gambar beriku
*Php
buka folder htdocs (C:/xampp/htdocs
buat sebuah folder dengan nama crud_android
didalam folder crud_android buat sebuah file dengan nama server.php
langkah berikutnya buatkan tabel_biodata. sesuaikan dengan gambar berikut
*Android
Buat project File-New android Aplikation beri nama crud_android. perhatikan gambar di bawah ini
pada lokasi src pastikan sudah ada ketiga file berikut ini
pada lokasi res>layout pastikan sudah ada file berikut ini
Buka AndroidManifes.xml, kemudian pastikan memiliki permission Internet. Berikut berupa isi AndroidManifest.xml saya :
Buka server.php yang berada di lokasi C:\xampp\htdocs\crud_androidl\server.php, lalu ketikkan source code berikut :
<?php
$server = "localhost";
$username = "root";
$password = "";
$database = "crud_android";
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);
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', '$alamat')");
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_error());
$data_array = array();
$data_array = mysql_fetch_assoc($query_tampil_biodata);
echo "[" . json_encode($data_array) . "]";
break;
break;
case "update":
/* Source code untuk Updatedata */
@$nama = $_GET['nama'];
@$alamat = $_GET['alamat'];
@$id = $_GET['id'];
$query_update_biodata = mysql_query("UPDATE tabel_biodata SET nama='$nama', alamat='$alamat' WHERE id='$id'");
if ($query_update_biodata) {
echo "Update Data Berhasil";
} else {
echo mysql_error();
}
break;
case "delete":
/* Source code untuk Deletedata */
@$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 - main.xml. berikut sourcodenya
<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>
berikut hasil layout
Pada layout saya membuat TableLayout berada pada VerticalScrollView di dalamScrollView, ini berfungsi agar data yang memiliki lebar lebih dari ukuran layar secara otomoatis terscroll sehingga data semua bisa kelihatan.
Android - Koneksi.java
Path : src/jhohannes.com/Koneksi.java. berikt sourcodenya
Path : src/jhohannes.com/Koneksi.java. berikt sourcodenya
package jhohannes.com;
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.com/Koneksi.java
Path : src/jhohannes.com/Koneksi.java
package jhohannes.com;
public class Biodata extends Koneksi {
String URL = "http://10.0.2.2/crud_android/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) {
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;
}
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 di ditangka oleh Method ini, kemudian hasilnya akan dikirim kepada yang memanggil.
Android - MainActivity.java
Path : src/jhohannes.com/MainActivity.java
Path : src/jhohannes.com/MainActivity.java
package jhohannes.com;
import java.util.ArrayList;
import jhohannes.purba.R;
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();
}
}
Di sini saya hanya akan menjelaskan bagaimana proses JSON bekerja, jika ingin mempelajari tampilan silahkan lihat referensinya di google.
jika dilhat hasil Json array, maka akan menyimpan data seperti berikut
array[0] => id=1, nama=Jhohannes Purba, alamat=Kabanjahe
Data yang diterima dari Biodata.java masih berupa String tetapi memiliki struktur JSON Encode. Dengan memasukkan String tersebut ke dalanJSONArray, maka otomatis data akan tersimpan didalam array. Tetapi perlu di ingat, bahwa data yang kita terima dari mysql adalah data berupa baris dan kolom.
jika dilhat hasil Json array, maka akan menyimpan data seperti berikut
array[0] => id=1, nama=Jhohannes Purba, alamat=Kabanjahe
array[1] => id=2, nama=Berkat Junaidi Banureae, alamat=Sidikalang
array[2] => id=3, nama=Totok Bluesman Silalahi, alamat=Medan
Jika kita ingin mengambil data berdasarkan filednya, misalnya hanya menampilkan data dengan isi Jhohannes Purba, berarti kita harus pecah lagi struktur arraynya dengan menggunakan JSONObject. Dengan menggunakan JSONObject maka kita mengambil data berdasarkan fieldnya saja dan kita bisa melakukan proses selanjutnya.
Untuk Hasil Runningnya seperti gambar berikkut
Semoga Bermanfaat
0 komentar:
Post a Comment