SlideShare une entreprise Scribd logo
1  sur  18
Télécharger pour lire hors ligne
Android Fast Track CRUD Android PHP MySql
Agus Haryanto, MKOMhttp://agusharyanto.net@agus_inovatoragus.superwriter@gmail.com08551000444 / 089673371119 
Juara 2 Indosat M2 Android Application ContestJuara Harapan Kompetisi Android T-Market (Telesindo) Juara 1 BBDEVID Challenge Blackberry Application (Webworks) Juara 1 AngelHack Blackberry Indonesia
ANDROID PHP MYSQL 
Kali ini kita akan membahas Bagaimana Android dapat mengirim data ke server dan membacanya. Ada beberapa pendekatan untuk komunikasi dengan server ini tetapi yang sering dipakai adalah melalui http. Dengan demikian untuk mempraktekannya kita harus menginstall apache web server lengakap dengan PHP dan MySQLnya. 
CRUD ANDROID PHP MYSQL 
Aplikasi yang menggunakan database pada umumnya memiliki fungsi untuk 
–Menampilkan data 
–Menambah data 
–Menghapus data 
–Merubah data 
Database SQLite pada android mempunyai keterbatasan pada salah satunya pada kapasitas penyimpanan data. Akan bermasalah apabila kita memaksakan menyimpan data yang besar (lebih dari 10000 data) pada SQLite. Selain itu jika kita ingin perubahan data aplikasi dirasakan oleh semua user tanpa harus install ulang aplikasi, maka data harus disimpan di Server. Cara yang paling sering digunakan adalah dengan perantara Webserver, PHP dan MySQL. Dimana android untuk melakukan perubahan data atau mendapatkan data dari database server cukup dengan memanggil url php yang telah ditentukan. 
Agar lebih dimengerti mari kita buat aplikasi tentang maintenance data harga handphone yang database servernya menggunakan MySQL dengan Web Server Apache dan Server Side Scriptnya menggunakan PHP untuk itu hal yang penting untuk dilakukan sebelum memulai pembuatan aplikasinya adalah menyiaplkan environment servernya dengan menginstall XAMPP (Windows) atau LAMP (Linux). Setelah selesai Instalasi lalu kita lakukan langkah berikut. 
1.Pekerjaan di MySql, buat database dan tablenya. 
CREATE DATABASE db_phone; 
CREATE TABLE tbl_phone ( 
id INT(4) NOT NULL AUTO_INCREMENT, 
phone_name VARCHAR(32) NOT NULL, 
price INT(10) NOT NULL, 
PRIMARY KEY (id) 
) 
ENGINE=MyISAM; 
insert into tbl_phone values(null,'Galaxy S3',6000000); 
insert into tbl_phone values(null,'Galaxy Ace 2',3000000); 
insert into tbl_phone values( null,'HTC One',6000000);
2.Siapkan Script PHP untuk memasukkan data baru ke tbl_phone, simpan dengan nama add_phone.php simpan didirectory document_root/phone contoh htdoc/phone jadi urlnya adalah “http://yourdomain/phone/add_phone.php” 
<?php 
$phone_name = $_POST['phone_name']; 
$price = $_POST['price']; 
$link = mysql_connect('localhost', 'user', 'password') or die('Cannot connect to the DB'); 
mysql_select_db('db_phone', $link) or die('Cannot select the DB'); 
/* grab the posts from the db */ 
$query = "insert into tbl_phone (phone_name,price) values('".$phone_name."',".$price.")"; 
$result = mysql_query($query, $link) or die('Error query: '.$query); 
if ($result == 1){echo "Save Data Success";}else{ echo "Save Data Fail";} 
?> 
3.Siapkan Script untuk menampilkan data yang sudah disimpan, simpan dengan nama list_phone.php 
<?php 
$link = mysql_connect('localhost', 'user', 'password') or die('Cannot connect to the DB'); 
mysql_select_db('db_phone', $link) or die('Cannot select the DB'); 
$result["errorcode"]="0"; 
/* grab the posts from the db */ 
$query = "SELECT id, phone_name, price FROM tbl_phone"; 
$rs= mysql_query($query, $link) or die('Errorquery: '.$query); 
$countrow= mysql_affected_rows(); 
$items = array(); 
while($row = mysql_fetch_object($rs)){ 
array_push($items, $row); 
} 
if($countrow >0){ 
$result["errorcode"] = "1"; 
$result["data"] = $items; 
}else{ 
$result["errormsg"] = "Tidak ada data"; 
} 
echo json_encode($result); 
?> 
4.Siapkan Script untuk Melakkukan perubahan data phone diserver, simpan dengan nama edit_phone.php 
<?php 
$id = $_POST['id']; 
$phone_name = $_POST['phone_name']; 
$price = $_POST['price']; 
$link = mysql_connect('localhost', 'user', 'password') or die('Cannot connect to the DB'); 
mysql_select_db('db_phone', $link) or die('Cannot select the DB'); 
/* grab the posts from the db */ 
$query = "update tbl_phone set phone_name='$phone_name',price=$price where id=$id"; 
$result = mysql_query($query, $link) or die('Error query: '.$query); 
if ($result == 1){echo "Save Data Success";}else{ echo "Save Data Fail";} 
?>
5.Siakan Scritpt untuk menghapus data phone di server, simpan dengan nama delete_phone.php 
<?php 
$id = $_POST['id']; 
$link = mysql_connect('localhost', 'user', 'password') or die('Cannot connect to the DB'); 
mysql_select_db('db_phone', $link) or die('Cannot select the DB'); 
/* grab the posts from the db */ 
$query = "delete from tbl_phone where id=$id"; 
$result = mysql_query($query, $link) or die('Error query: '.$query); 
if ($result == 1){echo "Save Data Success";}else{ echo "Save Data Fail";} 
?> 
6.Sekarang mari kita siapkan bagian androidnya, buat new android project MySQLPhone 
7.Buat Class HttpHelper.java lalu ketikkan kode berikut 
package net.agusharyanto.mysqlphone; 
import java.io.BufferedReader;
import java.io.InputStream; 
import java.io.InputStreamReader; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.DefaultHttpClient; 
import android.util.Log; 
public class HttpHelper { 
/** 
* Method untuk Mengirimkan data kes erver event by button login diklik 
* 
* @param view 
*/ 
public static String getRequest(String Url) { 
String sret=""; 
HttpClient client = new DefaultHttpClient(); 
HttpGet request = new HttpGet(Url); 
try { 
HttpResponse response = client.execute(request); 
sret= request(response); 
} catch (Exception ex) { 
} 
return sret; 
} 
/** 
* Method untuk Menenrima data dari server 
* 
* @param response 
* @return 
*/ 
public static String request(HttpResponse response) { 
String result = ""; 
try { 
InputStream in = response.getEntity().getContent(); 
BufferedReader reader = new BufferedReader( 
new InputStreamReader(in)); 
StringBuilder str = new StringBuilder(); 
String line = null; 
while ((line = reader.readLine()) != null) { 
str.append(line + "n"); 
} 
in.close(); 
result = str.toString(); 
} catch (Exception ex) { 
result = "Error"; 
} 
return result; 
} 
} 
Class HttpHelper ini digunakan untuk mengirim data keserver dan menangkap nilai yang dikembalikan server.
8.Buat class JSONFunction .java lalu ketikkan kode berikut 
package net.agusharyanto.mysqlphone; 
import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.params.BasicHttpParams; 
import org.apache.http.params.HttpConnectionParams; 
import org.apache.http.params.HttpParams; 
import org.json.JSONException; 
import org.json.JSONObject; 
import android.util.Log; 
public class JSONfunctions { 
public static JSONObject getJSONfromURL(String url) { 
InputStream is = null; 
String result = "0"; 
JSONObject jArray = null; 
try { 
HttpParams httpParameters = new BasicHttpParams(); 
int timeoutConnection = 60000; 
HttpConnectionParams.setConnectionTimeout(httpParameters, 
timeoutConnection); 
int timeoutSocket = 60000; 
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket); 
HttpClient httpclient = new DefaultHttpClient(httpParameters); 
HttpPost httppost = new HttpPost(url); 
HttpResponse response = httpclient.execute(httppost); 
HttpEntity entity = response.getEntity(); 
is = entity.getContent(); 
} catch (Exception e) { 
Log.e("log_tag", "Error intimeout http connection " + e.toString()); 
} 
// convert response to string 
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(); 
result = sb.toString(); 
} catch (Exception e) {
Log.e("log_tag", "Error converting result " + e.toString()); 
result = "{"errorcode":"0"}"; 
} 
try { 
jArray = new JSONObject(result); 
} catch (JSONException e) { 
Log.e("log_tag", "Error parsing data " + e.toString()); 
result = "{"errorcode":"0"}"; 
try { 
jArray = new JSONObject(result); 
} catch (JSONException e1) { 
// TODO Auto-generated catch block 
e1.printStackTrace(); 
} 
} 
return jArray; 
} 
public static String getStringJSONfromURL(String url) { 
InputStream is = null; 
String result = "0"; 
// http post 
try { 
HttpParams httpParameters = new BasicHttpParams(); 
int timeoutConnection = 60000; 
HttpConnectionParams.setConnectionTimeout(httpParameters, 
timeoutConnection); 
int timeoutSocket = 60000; 
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket); 
HttpClient httpclient = new DefaultHttpClient(httpParameters); 
HttpPost httppost = new HttpPost(url); 
HttpResponse response = httpclient.execute(httppost); 
HttpEntity entity = response.getEntity(); 
is = entity.getContent(); 
} catch (Exception e) { 
Log.e("log_tag", "Error intimeout http connection " + e.toString()); 
} 
// convert response to string 
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(); 
result = sb.toString(); 
} catch (Exception e) { 
Log.e("log_tag", "Error converting result " + e.toString());
result = "{"errorcode":"0"}"; 
} 
return result; 
} 
} 
Class JSONFunction ini digunakan untuk menangkap nilai kembalian dari server yang datanya berupa JSON 
9.Buat Layoutbaru dengan nama add.xml lalu ketikan kode berikut 
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 
<TextView android:text = "Smart Phone Name :" android:id="@+id/TextView01" 
android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView> 
< EditText android:text = "" android:id = "@+id/edtName" 
android:layout_width="fill_parent" android:layout_height="wrap_content"></EditText> 
<TextView android:text = "Price :" android:id="@+id/TextView02" 
android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView> 
< EditText android:text = "" android:id = "@+id/edtPrice" 
android:layout_width="fill_parent" android:layout_height="wrap_content"></EditText> 
<Button android:text = "Simpan" android:id="@+id/btnSave" 
android:layout_width="fill_parent" android:layout_height="wrap_content"></Button> 
</LinearLayout> 
10.Buat Layout dengan nama listphone.xml 
<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 
<TextView 
android:id="@+id/textView1" 
android:layout_width="150sp" 
android:layout_height="wrap_content" 
android:layout_alignParentLeft="true" 
android:layout_alignParentTop="true" 
android:text = "Phone Name" 
android:background="@drawable/border" 
android:textSize="20sp" android:padding="5sp" /> 
<TextView 
android:id="@+id/textView2" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:layout_alignParentTop="true" 
android:background="@drawable/border" 
android:layout_toRightOf="@+id/textView1" 
android:text = "Price" 
android:textSize="20sp" android:padding="5sp" /> 
<ListView android:id="@+id/list1" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_weight = "1" 
android:layout_alignParentLeft="true" 
android:layout_below="@+id/textView1"/> 
</RelativeLayout> 
11.Buat layout dengan nama row.xml 
<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="horizontal" 
android:paddingBottom="5sp" 
android:paddingTop="5sp" > 
< TextView 
android:id="@+id/phonename" 
android:layout_width="150sp" 
android:layout_height="wrap_content" 
android:layout_alignParentLeft="true" android:padding="5sp" /> 
< TextView 
android:id="@+id/price" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:gravity="right" 
android:layout_toRightOf="@+id/phonename" android:padding="5sp" /> 
<TextView 
android:id="@+id/idphone" 
android:layout_width="0sp" 
android:layout_height="wrap_content" 
android:layout_toRightOf = "@+id/indonesia" android:visibility="gone"/> 
</RelativeLayout> 
12.Semua Layout sudah siap, saatnya membuat bagian javanya. Pada awal yang ditampilkan adalah list smartphone dan harganya, buat class baru dengan nama ListDataPhoneActivity.java 
package net.agusharyanto.mysqlphone; 
import java.util.ArrayList; 
import java.util.HashMap; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 
import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.Context; 
import android.content.Intent; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.ContextMenu; 
import android.view.Menu;
import android.view.MenuItem; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.SimpleAdapter; 
import android.widget.Toast; 
public class ListDataPhoneActivity extends Activity { 
/** Called when the activity is first created. */ 
private ListView listView1; 
private static final int REQUEST_CODE = 1; 
private ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>(); 
private static final int ADD_ID = Menu.FIRST + 1; 
private static final int EDIT_ID = Menu.FIRST + 2; 
private static final int DELETE_ID = Menu.FIRST + 3; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.listphone); 
try { 
getDataPhone(); 
} catch (Exception e) { 
Log.e("log_tag", "Error parsing data " + e.toString()); 
} 
} 
/** 
* Class CallWebPageTask untuk implementasi class AscyncTask 
*/ 
private class requestTask extends AsyncTask<String, Void, String> { 
private ProgressDialog dialog; 
protected Context applicationContext; 
private String actionflag; 
@Override 
protected void onPreExecute() { 
this.dialog = ProgressDialog.show(applicationContext, 
"Load Data From Server Process", "Please Wait...", true); 
} 
@Override 
protected String doInBackground(String... urls) { 
String response = ""; 
response = getDataServer(urls[0]); 
return response; 
} 
@Override 
protected void onPostExecute(String result) { 
this.dialog.cancel(); 
if (actionflag.equals("list")) { 
if (result.equals("1")) 
setListData(); 
} else if (actionflag.equals("delete")) {
getDataPhone(); 
} 
} 
} 
public void getDataPhone() { 
mylist.clear(); 
requestTask task = new requestTask(); 
task.applicationContext = ListDataPhoneActivity.this; 
task.actionflag = "list"; 
String url = "http://10.0.2.2/phone/list_phone.php"; 
task.execute(new String[] { url }); 
} 
public String getDataServer(String url) { 
String sret = "1"; 
JSONObject json = JSONfunctions.getJSONfromURL(url); 
try { 
if (json.getString("errorcode").equals("0")) { 
Toast.makeText(getBaseContext(), json.getString("errormsg"), 
Toast.LENGTH_SHORT).show(); 
sret = "0"; 
} 
JSONArray makanan = json.getJSONArray("data"); 
for (int i = 0; i < makanan.length(); i++) { 
HashMap<String, String> map = new HashMap<String, String>(); 
JSONObject jsonobj = makanan.getJSONObject(i); 
map.put("id", jsonobj.getString("id")); 
; 
map.put("phone_name", jsonobj.getString("phone_name")); 
map.put("price", jsonobj.getString("price")); 
mylist.add(map); 
} 
} catch (JSONException e) { 
Log.e("log_tag", "Error parsing data " + e.toString()); 
} 
return sret; 
} 
private void showToast(String msg, int flag) { 
Toast.makeText(getBaseContext(), "Result " + msg, Toast.LENGTH_LONG) 
.show(); 
} 
private void setListData() { 
listView1 = (ListView) findViewById(R.id.list1); 
ListAdapter adapter = new SimpleAdapter(this, mylist, R.layout.row, 
new String[] { "phone_name", "price" }, new int[] { 
R.id.phonename, R.id.price });
listView1.setAdapter(adapter); 
registerForContextMenu(listView1); 
} 
@Override 
public void onCreateContextMenu(ContextMenu menu, View v, 
ContextMenu.ContextMenuInfo menuInfo) { 
menu.add(Menu.NONE, ADD_ID, Menu.NONE, "Add") 
.setIcon(R.drawable.ic_launcher).setAlphabeticShortcut( 'a'); 
menu.add(Menu.NONE, EDIT_ID, Menu.NONE, "Edit") 
.setIcon(R.drawable.ic_launcher).setAlphabeticShortcut( 'd'); 
menu.add(Menu.NONE, DELETE_ID, Menu.NONE, "Delete") 
.setIcon(R.drawable.ic_launcher).setAlphabeticShortcut( 'e'); 
} 
@Override 
public boolean onContextItemSelected(MenuItem item) { 
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item 
.getMenuInfo(); 
int idphone = (int) info.id; 
HashMap<String, String> o = (HashMap<String, String>) listView1 
.getItemAtPosition(idphone); 
switch (item.getItemId()) { 
case ADD_ID: 
addData(o, "add"); 
return (true); 
case DELETE_ID: 
deleteData(o); 
return (true); 
case EDIT_ID: 
editData(o, "edit"); 
return (true); 
} 
return (super.onOptionsItemSelected(item)); 
} 
private void editData(HashMap<String, String> o, String action) { 
Log.d("****editData*****", "ïd:" + o.get("id")); 
callIntent(o, action); 
} 
private void deleteData(HashMap<String, String> o) { 
requestTask task = new requestTask(); 
task.applicationContext = ListDataPhoneActivity.this; 
task.actionflag = "delete"; 
String url = "http://10.0.2.2/phone/delete_phone.php?id=" 
+ o.get("id"); 
task.execute(new String[] { url });
} 
private void addData(HashMap<String, String> o, String action) { 
callIntent(o, action); 
} 
private void callIntent(HashMap<String, String> o, String action) { 
Intent i = new Intent(this, AddPhoneActivity.class); 
i.putExtra("action", action); 
i.putExtra("dataphone", o); 
startActivityForResult(i, REQUEST_CODE); 
} 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
if (resultCode == RESULT_OK && requestCode == REQUEST_CODE) { 
if (data.hasExtra("refreshflag")) { 
if (data.getExtras().getString("refreshflag").equals("1")) 
getDataPhone(); 
} 
} 
} 
} 
13.Tentunya Aplikasikita tidak hanya menampilkan data saja tetapi dapat juga menambahkan data dan mengedit data, buat class baru dengan nama AddPhoneActivity.java 
package net.agusharyanto.mysqlphone; 
import java.io.UnsupportedEncodingException; 
import java.net.URLEncoder; 
import java.util.HashMap; 
import android.app.Activity; 
import android.content.Intent; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 
public class AddPhoneActivity extends Activity { 
private EditText edtName; 
private EditText edtPrice; 
private Button btnSave; 
// Seusuaikan url dengan nama domain yang anda gunakan 
private String url = ""; 
String action=""; 
String phoneid=""; 
/** 
* Method yang dipanggil pada saat aplikaasi dijalankan 
* */ 
@Override 
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); 
setContentView(R.layout.add); 
edtName = (EditText) findViewById(R.id.edtName); 
edtPrice = (EditText) findViewById(R.id.edtPrice); 
btnSave = (Button) findViewById(R.id.btnSave); 
Bundle extras = getIntent().getExtras(); 
if (extras == null) { 
return; 
} 
action = extras.getString("action"); 
HashMap <String,String> dataphone= (HashMap<String, String>) extras.get( "dataphone" ); 
if (action.equals("edit")){ 
edtName.setText(dataphone.get("phone_name")); 
edtPrice.setText(dataphone.get("price")); 
phoneid=dataphone.get("id"); 
} 
// daftarkan even onClick pada btnSave 
btnSave.setOnClickListener(new Button.OnClickListener() { 
@Override 
public void onClick(View v) { 
try { 
if (action.equals("add")){ 
url="http://10.0.2.2/phone/add_phone.php"; 
}else{ 
url="http://10.0.2.2/phone/edit_phone.php"; 
} 
String phone_name = URLEncoder.encode(edtName.getText() 
.toString(), "utf-8"); 
String price = URLEncoder.encode(edtPrice.getText() 
.toString(), "utf-8"); 
url += "?phone_name=" + phone_name + "&price=" + price; 
if (action.equals("edit")){ 
url+="&id="+phoneid; 
} 
Log.d("url**","url:"+url); 
new RequestTask().execute(url); 
} catch (UnsupportedEncodingException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
} 
} 
}); 
} 
@Override 
public void finish() { 
Intent data = new Intent(); 
data.putExtra("refreshflag", "1"); 
setResult(RESULT_OK, data); 
super.finish(); 
}
private void setResult(String result){ 
Toast.makeText(getBaseContext(), result, Toast.LENGTH_LONG).show(); 
finish(); 
} 
class RequestTask extends AsyncTask<String, String, String>{ 
@Override 
protected String doInBackground(String... uri) { 
String responseString = null; 
responseString= HttpHelper.getRequest(uri[0]); 
return responseString; 
} 
@Override 
protected void onPostExecute(String result) { 
super.onPostExecute(result); 
setResult(result); 
//Do anything with response.. 
} 
} 
} 
14.Edit AndroidManifest.xml lalu ketikan kode berikut 
<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="net.agusharyanto.mysqlphone" 
android:versionCode="1" 
android:versionName="1.0" > 
<uses-sdk 
android:minSdkVersion="8" 
android:targetSdkVersion="17" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<application 
android:allowBackup="true" 
android:icon="@drawable/ic_launcher" 
android:label="@string/app_name" 
android:theme="@style/AppTheme" > 
<activity 
android:name="net.agusharyanto.mysqlphone.ListDataPhoneActivity" 
android:label="@string/app_name" > 
<intent-filter> 
<action android:name="android.intent.action.MAIN" /> 
<category android:name="android.intent.category.LAUNCHER" /> 
</intent-filter> 
</activity> 
<activity android:name="AddPhoneActivity" android:label="Add Edit"/> 
</application> 
</manifest> 
15.Sekarang mari kita jalankan programnya.
Tekan yang lama pada salah satu baris 
Akan muncul konteks menu, jika ingin menambah data sentuh ADD, untuk merubah data sentuh Edit, untuk menghapus data sentih Delete.
TugasBuatlah Aplikasi User Management yang inputannya terdiri dari username, password, nama_lengkap.

Contenu connexe

Tendances

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...irwinvifxcfesre
 
Modul praktikum 9 - Android Sudaryatno
Modul praktikum 9 - Android SudaryatnoModul praktikum 9 - Android Sudaryatno
Modul praktikum 9 - Android SudaryatnoYatno Sudar
 
Jquery Introduction Hebrew
Jquery Introduction HebrewJquery Introduction Hebrew
Jquery Introduction HebrewAlex Ivy
 
Intro to jQuery UI
Intro to jQuery UIIntro to jQuery UI
Intro to jQuery UIappendTo
 
Юнит тестирование в Zend Framework 2.0
Юнит тестирование в Zend Framework 2.0Юнит тестирование в Zend Framework 2.0
Юнит тестирование в Zend Framework 2.0zfconfua
 
Meteor로 만드는 modern web application
Meteor로 만드는 modern web applicationMeteor로 만드는 modern web application
Meteor로 만드는 modern web applicationJaeho Lee
 
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 2015chicagonewsyesterday
 
Javascript and jQuery for Mobile
Javascript and jQuery for MobileJavascript and jQuery for Mobile
Javascript and jQuery for MobileIvano Malavolta
 
Pertemuan 8 google map
Pertemuan 8 google mapPertemuan 8 google map
Pertemuan 8 google mapheriakj
 
Documentacion edderson callpa_ortiz
Documentacion edderson callpa_ortizDocumentacion edderson callpa_ortiz
Documentacion edderson callpa_ortizEdderson J. Ortiz
 
Estandarizacion de macros
Estandarizacion de macrosEstandarizacion de macros
Estandarizacion de macrosgerariel
 

Tendances (20)

Sis quiz
Sis quizSis quiz
Sis quiz
 
Get more votes!
Get more votes!Get more votes!
Get more votes!
 
Prototype UI
Prototype UIPrototype UI
Prototype UI
 
Jquery2
Jquery2Jquery2
Jquery2
 
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...
 
Modul praktikum 9 - Android Sudaryatno
Modul praktikum 9 - Android SudaryatnoModul praktikum 9 - Android Sudaryatno
Modul praktikum 9 - Android Sudaryatno
 
Jquery Introduction Hebrew
Jquery Introduction HebrewJquery Introduction Hebrew
Jquery Introduction Hebrew
 
Intro to jQuery UI
Intro to jQuery UIIntro to jQuery UI
Intro to jQuery UI
 
Parse
ParseParse
Parse
 
Aplicacion turbogenerador java
Aplicacion turbogenerador javaAplicacion turbogenerador java
Aplicacion turbogenerador java
 
Юнит тестирование в Zend Framework 2.0
Юнит тестирование в Zend Framework 2.0Юнит тестирование в Zend Framework 2.0
Юнит тестирование в Zend Framework 2.0
 
Meteor로 만드는 modern web application
Meteor로 만드는 modern web applicationMeteor로 만드는 modern web application
Meteor로 만드는 modern web application
 
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
 
Javascript and jQuery for Mobile
Javascript and jQuery for MobileJavascript and jQuery for Mobile
Javascript and jQuery for Mobile
 
Jquery ui, ajax
Jquery ui, ajaxJquery ui, ajax
Jquery ui, ajax
 
Blog 3
Blog 3Blog 3
Blog 3
 
Pertemuan 8 google map
Pertemuan 8 google mapPertemuan 8 google map
Pertemuan 8 google map
 
Documentacion edderson callpa_ortiz
Documentacion edderson callpa_ortizDocumentacion edderson callpa_ortiz
Documentacion edderson callpa_ortiz
 
Get more votes!
Get more votes!Get more votes!
Get more votes!
 
Estandarizacion de macros
Estandarizacion de macrosEstandarizacion de macros
Estandarizacion de macros
 

Plus de Agus Haryanto

Tutorial Android Membuat Aplikasi senter Flash light
Tutorial Android Membuat Aplikasi senter Flash lightTutorial Android Membuat Aplikasi senter Flash light
Tutorial Android Membuat Aplikasi senter Flash lightAgus Haryanto
 
Kenalan Dengan Firebase Android
Kenalan Dengan Firebase AndroidKenalan Dengan Firebase Android
Kenalan Dengan Firebase AndroidAgus Haryanto
 
Belajar Android Studio Memberi Efek animasi pada Button
Belajar Android Studio Memberi Efek animasi pada ButtonBelajar Android Studio Memberi Efek animasi pada Button
Belajar Android Studio Memberi Efek animasi pada ButtonAgus Haryanto
 
Belajar Android Membuat Katalog Produk
Belajar Android Membuat Katalog ProdukBelajar Android Membuat Katalog Produk
Belajar Android Membuat Katalog ProdukAgus Haryanto
 
Belajar Android PHP MySQL Login dengan Volley
Belajar Android PHP MySQL Login dengan VolleyBelajar Android PHP MySQL Login dengan Volley
Belajar Android PHP MySQL Login dengan VolleyAgus Haryanto
 
Belajar Android Studio - Membuat Aplikasi Android Sederhana
Belajar Android Studio - Membuat Aplikasi Android SederhanaBelajar Android Studio - Membuat Aplikasi Android Sederhana
Belajar Android Studio - Membuat Aplikasi Android SederhanaAgus Haryanto
 
Panduan Instalasi Android Studio
Panduan Instalasi Android StudioPanduan Instalasi Android Studio
Panduan Instalasi Android StudioAgus Haryanto
 
Sistem Informasi Pelaporan Kebakaran
Sistem Informasi Pelaporan KebakaranSistem Informasi Pelaporan Kebakaran
Sistem Informasi Pelaporan KebakaranAgus Haryanto
 
Seminar Android as your Smart Future
Seminar Android as your Smart FutureSeminar Android as your Smart Future
Seminar Android as your Smart FutureAgus Haryanto
 
Android Sliding Menu dengan Navigation Drawer
Android Sliding Menu dengan Navigation DrawerAndroid Sliding Menu dengan Navigation Drawer
Android Sliding Menu dengan Navigation DrawerAgus Haryanto
 
Langkah-langkah Instalasi software untuk develop aplikasi android
Langkah-langkah Instalasi software untuk develop aplikasi androidLangkah-langkah Instalasi software untuk develop aplikasi android
Langkah-langkah Instalasi software untuk develop aplikasi androidAgus Haryanto
 
Android Radio streaming
Android Radio streamingAndroid Radio streaming
Android Radio streamingAgus Haryanto
 
Android Fast Track - Database SQLite (Kamus Tiga Bahasa)
Android Fast Track - Database SQLite (Kamus Tiga Bahasa)Android Fast Track - Database SQLite (Kamus Tiga Bahasa)
Android Fast Track - Database SQLite (Kamus Tiga Bahasa)Agus Haryanto
 
Android fast track_course
Android fast track_courseAndroid fast track_course
Android fast track_courseAgus Haryanto
 
Menghitung luas persegi panjang dengan android
Menghitung luas persegi panjang dengan androidMenghitung luas persegi panjang dengan android
Menghitung luas persegi panjang dengan androidAgus Haryanto
 

Plus de Agus Haryanto (15)

Tutorial Android Membuat Aplikasi senter Flash light
Tutorial Android Membuat Aplikasi senter Flash lightTutorial Android Membuat Aplikasi senter Flash light
Tutorial Android Membuat Aplikasi senter Flash light
 
Kenalan Dengan Firebase Android
Kenalan Dengan Firebase AndroidKenalan Dengan Firebase Android
Kenalan Dengan Firebase Android
 
Belajar Android Studio Memberi Efek animasi pada Button
Belajar Android Studio Memberi Efek animasi pada ButtonBelajar Android Studio Memberi Efek animasi pada Button
Belajar Android Studio Memberi Efek animasi pada Button
 
Belajar Android Membuat Katalog Produk
Belajar Android Membuat Katalog ProdukBelajar Android Membuat Katalog Produk
Belajar Android Membuat Katalog Produk
 
Belajar Android PHP MySQL Login dengan Volley
Belajar Android PHP MySQL Login dengan VolleyBelajar Android PHP MySQL Login dengan Volley
Belajar Android PHP MySQL Login dengan Volley
 
Belajar Android Studio - Membuat Aplikasi Android Sederhana
Belajar Android Studio - Membuat Aplikasi Android SederhanaBelajar Android Studio - Membuat Aplikasi Android Sederhana
Belajar Android Studio - Membuat Aplikasi Android Sederhana
 
Panduan Instalasi Android Studio
Panduan Instalasi Android StudioPanduan Instalasi Android Studio
Panduan Instalasi Android Studio
 
Sistem Informasi Pelaporan Kebakaran
Sistem Informasi Pelaporan KebakaranSistem Informasi Pelaporan Kebakaran
Sistem Informasi Pelaporan Kebakaran
 
Seminar Android as your Smart Future
Seminar Android as your Smart FutureSeminar Android as your Smart Future
Seminar Android as your Smart Future
 
Android Sliding Menu dengan Navigation Drawer
Android Sliding Menu dengan Navigation DrawerAndroid Sliding Menu dengan Navigation Drawer
Android Sliding Menu dengan Navigation Drawer
 
Langkah-langkah Instalasi software untuk develop aplikasi android
Langkah-langkah Instalasi software untuk develop aplikasi androidLangkah-langkah Instalasi software untuk develop aplikasi android
Langkah-langkah Instalasi software untuk develop aplikasi android
 
Android Radio streaming
Android Radio streamingAndroid Radio streaming
Android Radio streaming
 
Android Fast Track - Database SQLite (Kamus Tiga Bahasa)
Android Fast Track - Database SQLite (Kamus Tiga Bahasa)Android Fast Track - Database SQLite (Kamus Tiga Bahasa)
Android Fast Track - Database SQLite (Kamus Tiga Bahasa)
 
Android fast track_course
Android fast track_courseAndroid fast track_course
Android fast track_course
 
Menghitung luas persegi panjang dengan android
Menghitung luas persegi panjang dengan androidMenghitung luas persegi panjang dengan android
Menghitung luas persegi panjang dengan android
 

Android Fast Track CRUD Android PHP MySql

  • 2. Agus Haryanto, MKOMhttp://agusharyanto.net@agus_inovatoragus.superwriter@gmail.com08551000444 / 089673371119 Juara 2 Indosat M2 Android Application ContestJuara Harapan Kompetisi Android T-Market (Telesindo) Juara 1 BBDEVID Challenge Blackberry Application (Webworks) Juara 1 AngelHack Blackberry Indonesia
  • 3. ANDROID PHP MYSQL Kali ini kita akan membahas Bagaimana Android dapat mengirim data ke server dan membacanya. Ada beberapa pendekatan untuk komunikasi dengan server ini tetapi yang sering dipakai adalah melalui http. Dengan demikian untuk mempraktekannya kita harus menginstall apache web server lengakap dengan PHP dan MySQLnya. CRUD ANDROID PHP MYSQL Aplikasi yang menggunakan database pada umumnya memiliki fungsi untuk –Menampilkan data –Menambah data –Menghapus data –Merubah data Database SQLite pada android mempunyai keterbatasan pada salah satunya pada kapasitas penyimpanan data. Akan bermasalah apabila kita memaksakan menyimpan data yang besar (lebih dari 10000 data) pada SQLite. Selain itu jika kita ingin perubahan data aplikasi dirasakan oleh semua user tanpa harus install ulang aplikasi, maka data harus disimpan di Server. Cara yang paling sering digunakan adalah dengan perantara Webserver, PHP dan MySQL. Dimana android untuk melakukan perubahan data atau mendapatkan data dari database server cukup dengan memanggil url php yang telah ditentukan. Agar lebih dimengerti mari kita buat aplikasi tentang maintenance data harga handphone yang database servernya menggunakan MySQL dengan Web Server Apache dan Server Side Scriptnya menggunakan PHP untuk itu hal yang penting untuk dilakukan sebelum memulai pembuatan aplikasinya adalah menyiaplkan environment servernya dengan menginstall XAMPP (Windows) atau LAMP (Linux). Setelah selesai Instalasi lalu kita lakukan langkah berikut. 1.Pekerjaan di MySql, buat database dan tablenya. CREATE DATABASE db_phone; CREATE TABLE tbl_phone ( id INT(4) NOT NULL AUTO_INCREMENT, phone_name VARCHAR(32) NOT NULL, price INT(10) NOT NULL, PRIMARY KEY (id) ) ENGINE=MyISAM; insert into tbl_phone values(null,'Galaxy S3',6000000); insert into tbl_phone values(null,'Galaxy Ace 2',3000000); insert into tbl_phone values( null,'HTC One',6000000);
  • 4. 2.Siapkan Script PHP untuk memasukkan data baru ke tbl_phone, simpan dengan nama add_phone.php simpan didirectory document_root/phone contoh htdoc/phone jadi urlnya adalah “http://yourdomain/phone/add_phone.php” <?php $phone_name = $_POST['phone_name']; $price = $_POST['price']; $link = mysql_connect('localhost', 'user', 'password') or die('Cannot connect to the DB'); mysql_select_db('db_phone', $link) or die('Cannot select the DB'); /* grab the posts from the db */ $query = "insert into tbl_phone (phone_name,price) values('".$phone_name."',".$price.")"; $result = mysql_query($query, $link) or die('Error query: '.$query); if ($result == 1){echo "Save Data Success";}else{ echo "Save Data Fail";} ?> 3.Siapkan Script untuk menampilkan data yang sudah disimpan, simpan dengan nama list_phone.php <?php $link = mysql_connect('localhost', 'user', 'password') or die('Cannot connect to the DB'); mysql_select_db('db_phone', $link) or die('Cannot select the DB'); $result["errorcode"]="0"; /* grab the posts from the db */ $query = "SELECT id, phone_name, price FROM tbl_phone"; $rs= mysql_query($query, $link) or die('Errorquery: '.$query); $countrow= mysql_affected_rows(); $items = array(); while($row = mysql_fetch_object($rs)){ array_push($items, $row); } if($countrow >0){ $result["errorcode"] = "1"; $result["data"] = $items; }else{ $result["errormsg"] = "Tidak ada data"; } echo json_encode($result); ?> 4.Siapkan Script untuk Melakkukan perubahan data phone diserver, simpan dengan nama edit_phone.php <?php $id = $_POST['id']; $phone_name = $_POST['phone_name']; $price = $_POST['price']; $link = mysql_connect('localhost', 'user', 'password') or die('Cannot connect to the DB'); mysql_select_db('db_phone', $link) or die('Cannot select the DB'); /* grab the posts from the db */ $query = "update tbl_phone set phone_name='$phone_name',price=$price where id=$id"; $result = mysql_query($query, $link) or die('Error query: '.$query); if ($result == 1){echo "Save Data Success";}else{ echo "Save Data Fail";} ?>
  • 5. 5.Siakan Scritpt untuk menghapus data phone di server, simpan dengan nama delete_phone.php <?php $id = $_POST['id']; $link = mysql_connect('localhost', 'user', 'password') or die('Cannot connect to the DB'); mysql_select_db('db_phone', $link) or die('Cannot select the DB'); /* grab the posts from the db */ $query = "delete from tbl_phone where id=$id"; $result = mysql_query($query, $link) or die('Error query: '.$query); if ($result == 1){echo "Save Data Success";}else{ echo "Save Data Fail";} ?> 6.Sekarang mari kita siapkan bagian androidnya, buat new android project MySQLPhone 7.Buat Class HttpHelper.java lalu ketikkan kode berikut package net.agusharyanto.mysqlphone; import java.io.BufferedReader;
  • 6. import java.io.InputStream; import java.io.InputStreamReader; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import android.util.Log; public class HttpHelper { /** * Method untuk Mengirimkan data kes erver event by button login diklik * * @param view */ public static String getRequest(String Url) { String sret=""; HttpClient client = new DefaultHttpClient(); HttpGet request = new HttpGet(Url); try { HttpResponse response = client.execute(request); sret= request(response); } catch (Exception ex) { } return sret; } /** * Method untuk Menenrima data dari server * * @param response * @return */ public static String request(HttpResponse response) { String result = ""; try { InputStream in = response.getEntity().getContent(); BufferedReader reader = new BufferedReader( new InputStreamReader(in)); StringBuilder str = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { str.append(line + "n"); } in.close(); result = str.toString(); } catch (Exception ex) { result = "Error"; } return result; } } Class HttpHelper ini digunakan untuk mengirim data keserver dan menangkap nilai yang dikembalikan server.
  • 7. 8.Buat class JSONFunction .java lalu ketikkan kode berikut package net.agusharyanto.mysqlphone; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.params.BasicHttpParams; import org.apache.http.params.HttpConnectionParams; import org.apache.http.params.HttpParams; import org.json.JSONException; import org.json.JSONObject; import android.util.Log; public class JSONfunctions { public static JSONObject getJSONfromURL(String url) { InputStream is = null; String result = "0"; JSONObject jArray = null; try { HttpParams httpParameters = new BasicHttpParams(); int timeoutConnection = 60000; HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection); int timeoutSocket = 60000; HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket); HttpClient httpclient = new DefaultHttpClient(httpParameters); HttpPost httppost = new HttpPost(url); HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); is = entity.getContent(); } catch (Exception e) { Log.e("log_tag", "Error intimeout http connection " + e.toString()); } // convert response to string 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(); result = sb.toString(); } catch (Exception e) {
  • 8. Log.e("log_tag", "Error converting result " + e.toString()); result = "{"errorcode":"0"}"; } try { jArray = new JSONObject(result); } catch (JSONException e) { Log.e("log_tag", "Error parsing data " + e.toString()); result = "{"errorcode":"0"}"; try { jArray = new JSONObject(result); } catch (JSONException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } return jArray; } public static String getStringJSONfromURL(String url) { InputStream is = null; String result = "0"; // http post try { HttpParams httpParameters = new BasicHttpParams(); int timeoutConnection = 60000; HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection); int timeoutSocket = 60000; HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket); HttpClient httpclient = new DefaultHttpClient(httpParameters); HttpPost httppost = new HttpPost(url); HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); is = entity.getContent(); } catch (Exception e) { Log.e("log_tag", "Error intimeout http connection " + e.toString()); } // convert response to string 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(); result = sb.toString(); } catch (Exception e) { Log.e("log_tag", "Error converting result " + e.toString());
  • 9. result = "{"errorcode":"0"}"; } return result; } } Class JSONFunction ini digunakan untuk menangkap nilai kembalian dari server yang datanya berupa JSON 9.Buat Layoutbaru dengan nama add.xml lalu ketikan kode berikut <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:text = "Smart Phone Name :" android:id="@+id/TextView01" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView> < EditText android:text = "" android:id = "@+id/edtName" android:layout_width="fill_parent" android:layout_height="wrap_content"></EditText> <TextView android:text = "Price :" android:id="@+id/TextView02" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView> < EditText android:text = "" android:id = "@+id/edtPrice" android:layout_width="fill_parent" android:layout_height="wrap_content"></EditText> <Button android:text = "Simpan" android:id="@+id/btnSave" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button> </LinearLayout> 10.Buat Layout dengan nama listphone.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/textView1" android:layout_width="150sp" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:text = "Phone Name" android:background="@drawable/border" android:textSize="20sp" android:padding="5sp" /> <TextView android:id="@+id/textView2" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:background="@drawable/border" android:layout_toRightOf="@+id/textView1" android:text = "Price" android:textSize="20sp" android:padding="5sp" /> <ListView android:id="@+id/list1" android:layout_width="fill_parent"
  • 10. android:layout_height="wrap_content" android:layout_weight = "1" android:layout_alignParentLeft="true" android:layout_below="@+id/textView1"/> </RelativeLayout> 11.Buat layout dengan nama row.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" android:paddingBottom="5sp" android:paddingTop="5sp" > < TextView android:id="@+id/phonename" android:layout_width="150sp" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:padding="5sp" /> < TextView android:id="@+id/price" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="right" android:layout_toRightOf="@+id/phonename" android:padding="5sp" /> <TextView android:id="@+id/idphone" android:layout_width="0sp" android:layout_height="wrap_content" android:layout_toRightOf = "@+id/indonesia" android:visibility="gone"/> </RelativeLayout> 12.Semua Layout sudah siap, saatnya membuat bagian javanya. Pada awal yang ditampilkan adalah list smartphone dan harganya, buat class baru dengan nama ListDataPhoneActivity.java package net.agusharyanto.mysqlphone; import java.util.ArrayList; import java.util.HashMap; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.app.ProgressDialog; import android.content.Context; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.ContextMenu; import android.view.Menu;
  • 11. import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.Toast; public class ListDataPhoneActivity extends Activity { /** Called when the activity is first created. */ private ListView listView1; private static final int REQUEST_CODE = 1; private ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>(); private static final int ADD_ID = Menu.FIRST + 1; private static final int EDIT_ID = Menu.FIRST + 2; private static final int DELETE_ID = Menu.FIRST + 3; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.listphone); try { getDataPhone(); } catch (Exception e) { Log.e("log_tag", "Error parsing data " + e.toString()); } } /** * Class CallWebPageTask untuk implementasi class AscyncTask */ private class requestTask extends AsyncTask<String, Void, String> { private ProgressDialog dialog; protected Context applicationContext; private String actionflag; @Override protected void onPreExecute() { this.dialog = ProgressDialog.show(applicationContext, "Load Data From Server Process", "Please Wait...", true); } @Override protected String doInBackground(String... urls) { String response = ""; response = getDataServer(urls[0]); return response; } @Override protected void onPostExecute(String result) { this.dialog.cancel(); if (actionflag.equals("list")) { if (result.equals("1")) setListData(); } else if (actionflag.equals("delete")) {
  • 12. getDataPhone(); } } } public void getDataPhone() { mylist.clear(); requestTask task = new requestTask(); task.applicationContext = ListDataPhoneActivity.this; task.actionflag = "list"; String url = "http://10.0.2.2/phone/list_phone.php"; task.execute(new String[] { url }); } public String getDataServer(String url) { String sret = "1"; JSONObject json = JSONfunctions.getJSONfromURL(url); try { if (json.getString("errorcode").equals("0")) { Toast.makeText(getBaseContext(), json.getString("errormsg"), Toast.LENGTH_SHORT).show(); sret = "0"; } JSONArray makanan = json.getJSONArray("data"); for (int i = 0; i < makanan.length(); i++) { HashMap<String, String> map = new HashMap<String, String>(); JSONObject jsonobj = makanan.getJSONObject(i); map.put("id", jsonobj.getString("id")); ; map.put("phone_name", jsonobj.getString("phone_name")); map.put("price", jsonobj.getString("price")); mylist.add(map); } } catch (JSONException e) { Log.e("log_tag", "Error parsing data " + e.toString()); } return sret; } private void showToast(String msg, int flag) { Toast.makeText(getBaseContext(), "Result " + msg, Toast.LENGTH_LONG) .show(); } private void setListData() { listView1 = (ListView) findViewById(R.id.list1); ListAdapter adapter = new SimpleAdapter(this, mylist, R.layout.row, new String[] { "phone_name", "price" }, new int[] { R.id.phonename, R.id.price });
  • 13. listView1.setAdapter(adapter); registerForContextMenu(listView1); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { menu.add(Menu.NONE, ADD_ID, Menu.NONE, "Add") .setIcon(R.drawable.ic_launcher).setAlphabeticShortcut( 'a'); menu.add(Menu.NONE, EDIT_ID, Menu.NONE, "Edit") .setIcon(R.drawable.ic_launcher).setAlphabeticShortcut( 'd'); menu.add(Menu.NONE, DELETE_ID, Menu.NONE, "Delete") .setIcon(R.drawable.ic_launcher).setAlphabeticShortcut( 'e'); } @Override public boolean onContextItemSelected(MenuItem item) { AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item .getMenuInfo(); int idphone = (int) info.id; HashMap<String, String> o = (HashMap<String, String>) listView1 .getItemAtPosition(idphone); switch (item.getItemId()) { case ADD_ID: addData(o, "add"); return (true); case DELETE_ID: deleteData(o); return (true); case EDIT_ID: editData(o, "edit"); return (true); } return (super.onOptionsItemSelected(item)); } private void editData(HashMap<String, String> o, String action) { Log.d("****editData*****", "ïd:" + o.get("id")); callIntent(o, action); } private void deleteData(HashMap<String, String> o) { requestTask task = new requestTask(); task.applicationContext = ListDataPhoneActivity.this; task.actionflag = "delete"; String url = "http://10.0.2.2/phone/delete_phone.php?id=" + o.get("id"); task.execute(new String[] { url });
  • 14. } private void addData(HashMap<String, String> o, String action) { callIntent(o, action); } private void callIntent(HashMap<String, String> o, String action) { Intent i = new Intent(this, AddPhoneActivity.class); i.putExtra("action", action); i.putExtra("dataphone", o); startActivityForResult(i, REQUEST_CODE); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK && requestCode == REQUEST_CODE) { if (data.hasExtra("refreshflag")) { if (data.getExtras().getString("refreshflag").equals("1")) getDataPhone(); } } } } 13.Tentunya Aplikasikita tidak hanya menampilkan data saja tetapi dapat juga menambahkan data dan mengedit data, buat class baru dengan nama AddPhoneActivity.java package net.agusharyanto.mysqlphone; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.HashMap; import android.app.Activity; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class AddPhoneActivity extends Activity { private EditText edtName; private EditText edtPrice; private Button btnSave; // Seusuaikan url dengan nama domain yang anda gunakan private String url = ""; String action=""; String phoneid=""; /** * Method yang dipanggil pada saat aplikaasi dijalankan * */ @Override public void onCreate(Bundle savedInstanceState) {
  • 15. super.onCreate(savedInstanceState); setContentView(R.layout.add); edtName = (EditText) findViewById(R.id.edtName); edtPrice = (EditText) findViewById(R.id.edtPrice); btnSave = (Button) findViewById(R.id.btnSave); Bundle extras = getIntent().getExtras(); if (extras == null) { return; } action = extras.getString("action"); HashMap <String,String> dataphone= (HashMap<String, String>) extras.get( "dataphone" ); if (action.equals("edit")){ edtName.setText(dataphone.get("phone_name")); edtPrice.setText(dataphone.get("price")); phoneid=dataphone.get("id"); } // daftarkan even onClick pada btnSave btnSave.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { try { if (action.equals("add")){ url="http://10.0.2.2/phone/add_phone.php"; }else{ url="http://10.0.2.2/phone/edit_phone.php"; } String phone_name = URLEncoder.encode(edtName.getText() .toString(), "utf-8"); String price = URLEncoder.encode(edtPrice.getText() .toString(), "utf-8"); url += "?phone_name=" + phone_name + "&price=" + price; if (action.equals("edit")){ url+="&id="+phoneid; } Log.d("url**","url:"+url); new RequestTask().execute(url); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); } @Override public void finish() { Intent data = new Intent(); data.putExtra("refreshflag", "1"); setResult(RESULT_OK, data); super.finish(); }
  • 16. private void setResult(String result){ Toast.makeText(getBaseContext(), result, Toast.LENGTH_LONG).show(); finish(); } class RequestTask extends AsyncTask<String, String, String>{ @Override protected String doInBackground(String... uri) { String responseString = null; responseString= HttpHelper.getRequest(uri[0]); return responseString; } @Override protected void onPostExecute(String result) { super.onPostExecute(result); setResult(result); //Do anything with response.. } } } 14.Edit AndroidManifest.xml lalu ketikan kode berikut <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="net.agusharyanto.mysqlphone" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <uses-permission android:name="android.permission.INTERNET" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="net.agusharyanto.mysqlphone.ListDataPhoneActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="AddPhoneActivity" android:label="Add Edit"/> </application> </manifest> 15.Sekarang mari kita jalankan programnya.
  • 17. Tekan yang lama pada salah satu baris Akan muncul konteks menu, jika ingin menambah data sentuh ADD, untuk merubah data sentuh Edit, untuk menghapus data sentih Delete.
  • 18. TugasBuatlah Aplikasi User Management yang inputannya terdiri dari username, password, nama_lengkap.