http://agusharyanto.net
@agus_inovator
agus.superwriter@gmail.com
08551000444 / 089673371119
Kali ini kita akan membahas Bagaimana Android dapat mengirim data ke server dan mem-
bacanya. 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.
?>
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";
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'];
?>
5. Siakan Scritpt untuk menghapus data phone di server, simpan dengan nama
delete_phone.php
<?php
$id = $_POST['id'];
?>
6. Sekarang mari kita siapkan bagian androidnya, buat new android project 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;
/**
* 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 dikemba-
likan 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;
try {
} catch (Exception e) {
Log.e("log_tag", "Error intimeout http connection " +
e.toString());
try {
return jArray;
}
// http post
try {
} catch (Exception e) {
Log.e("log_tag", "Error intimeout http connection " +
e.toString());
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>
<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" />
</RelativeLayout>
<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;
@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> {
@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();
}
}
}
try {
if (json.getString("errorcode").equals("0")) {
Toast.makeText(getBaseContext(),
json.getString("errormsg"),
Toast.LENGTH_SHORT).show();
sret = "0";
}
JSONArray makanan = json.getJSONArray("data");
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;
}
@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));
}
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;
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();
}
@Override
protected String doInBackground(String... uri) {
responseString= HttpHelper.getRequest(uri[0]);
return responseString;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
setResult(result);
//Do anything with response..
}
<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" />
</manifest>
Akan muncul konteks menu, jika ingin menambah data sentuh ADD, untuk merubah data sentuh Edit,
untuk menghapus data sentih Delete.
Tugas
Buatlah Aplikasi User Management yang inputannya terdiri dari username, password, nama_lengkap.