Posting kali ini, kita mencoba membuat aplikasi client server berbasis Android dan menghubungkan dengan database MySQL. Client-server ? Ya…. Kita akan membuat aplikasi Android yang datanya akan disimpan pada sebuah server. Bisa local (localhost) atau di internet.
Mengapa kita harus menympan data di database, bukankah di Android memiliki database untuk menyimpan data ?. Sebenarnya Android memiliki fasilitas untuk menyimpan data yaitu:
- Shared preferences. Terdiri dari key dan value data. Model ini biasanya untuk menyimpan settingan (pengaturan) sebuah aplikasi.
- File. Fasilitas ini juga dapat menyimpan data sama halnya dengan Shared Preferences, hanya saja data disimpan ke dalam bentuk file. Misalnya: txt, xml atau bentuk file lainnya
- SQLite Database. Fasilitas ini cukup idel untuk menyimpan data yang lumayan banyak. Berbeda halnya dengan no 1 dan 2 di atas yang biasanya untuk menyimpan data yang sedikit seperti pengaturan. Dengan SQLite, kita dapat melakukan query dan table-table seperti halnya database pada umumnya.
Untuk mempelajari ketiga fasilitas di atas, silakan klik http://developer.android.com/training/basics/data-storage/index.html.
Ketiga fasilitas di atas menyimpan data pada ponsel pengguna (client). Nah, bagaimana jika ingin data itu selalu update dan dapat mengaksesnya siapa saja dan dimana saja (anyone, anytime and anywhere)?. Itulah alasanya mengapa kita memerlukan sebuah server dalam hal ini MySQL.
Aplikasi yang akan kita bangun tergambar seperti berikut:
OK….. langsung saja
1. Membuat database MySQL
Database: latihan_android
Table: mahasiswa (id, nim, nama, telp, alamat)
create
database
latihan_android;
use latihan_android;
CREATE
TABLE
IF
NOT
EXISTS `mahasiswa` (
`id`
int
(11)
NOT
NULL
AUTO_INCREMENT,
`nim`
varchar
(11)
NOT
NULL
,
`nama`
varchar
(100)
NOT
NULL
,
`telp`
varchar
(50)
NOT
NULL
,
`alamat`
varchar
(255)
NOT
NULL
,
PRIMARY
KEY
(`id`)
) ENGINE=InnoDB
DEFAULT
CHARSET=latin1 AUTO_INCREMENT=29 ;
--
-- Dumping data for table `mahasiswa`
--
INSERT
INTO
`mahasiswa` ( `nim`, `nama`, `telp`, `alamat`)
VALUES
(
'2222'
,
'aaaa'
,
'0801'
,
'Alamat 1'
),
(
'1111'
,
'bbbb'
,
'0802'
,
'Alamat 2'
),
(
'2222'
,
'cccc'
,
'0803'
,
'Alamat 3'
),
(
'3333'
,
'dddd'
,
'0804'
,
'Alamat 4'
),
(
'1111'
,
'eeee'
,
'0805'
,
'Alamat 5'
),
(
'2222'
,
'ffff'
,
'0806'
,
'Alamat 6'
),
(
'3333'
,
'gggg'
,
'0807'
,
'Alamat 7'
),
(
'4444'
,
'hhhh'
,
'0808'
,
'Alamat 8'
),
(
'5555'
,
'iiii'
,
'0809'
,
'Alamat 9'
);
2. Membuat script PHP
Database sudah selesai, selanjutnya adalah membuat script server side. Koq kita butuh script server side, Kita kan belajar Android (Java) ? … Sebenarnya Android tidak dapat berkomunikasi langsung dengan MySQL untuk memanipulasi database. Untuk itu, kita membutuhkan script server side misalnya ASP, JSP atau PHP untuk bisa menjadi “jembatan” antara Android dengan MySQL. Jadi, Android hanya memberika perintah (request) ke PHP dan PHP lah yang akan melaksanakan query ke MySQL.
Pada posting ini, kita membuat 5 (lima) file PHP.
1. index.php : sebagai file index dan hanya berisi HTML
2. connection.php: sebagai file koneksi ke database
3. select_all.php: untuk melakukan query select all, mengabil seluruh data dari table Mahasiswa
4. submit_mahasiswa.php : untuk memproses simpan dan update
5. delete_mahasiswa.php: untuk menghapus (delete) data mahasiswa
Semua file di atas diletakkan dalam direktori “android”. c:/xampp/htdocs/android. (sesuaikan dengan direktori server Anda).
index.php
<
html
>
<
head
>
<
title
>Index Android</
title
>
</
head
>
<
body
>
<
h3
>Index Android</
h3
>
</
body
>
</
html
>
<?php
/*silakan sesuaikan dengan konfigurasi server Anda*/
$conn
= mysql_connect(
'localhost'
,
'root'
,
'xxxxx'
)
or
die
(mysql_error());
$db
= mysql_select_db(
'latihan_android'
)
or
die
(mysql_error());
?>
select_all.php
<?php
/*reply data dalam JSON */
include
(
'connection.php'
);
$query
=
'select * from mahasiswa'
;
$result
= mysql_query(
$query
)
or
die
(mysql_error());
$data
=
array
();
while
(
$row
= mysql_fetch_object(
$result
)){
$data
[
'mahasiswa'
][]=
$row
;
}
echo
json_encode(
$data
);
?>
submit_mahasiswa.php
<?php
/**jika id = 0,maka akan dilakukan insert, jika tidak update berdasarkan id */
include
(
'connection.php'
);
$id
= (int)
$_POST
[
'id'
];
$nim
=
$_POST
[
'nim'
];
$nama
=
$_POST
[
'nama'
];
$telp
=
$_POST
[
'telp'
];
$alamat
=
$_POST
[
'alamat'
];
$query
=
'insert into mahasiswa (nim, nama, telp, alamat) values ("'
.
$nim
.
'", "'
.
$nama
.
'", "'
.
$telp
.
'", "'
.
$alamat
.
'")'
;
if
(
$id
> 0){
$query
=
'update mahasiswa set nama = "'
.
$nama
.
'", nim = "'
.
$nim
.
'", telp = "'
.
$telp
.
'", alamat = "'
.
$alamat
.
'" where id = '
.
$id
;
}
mysql_query(
$query
)
or
die
(mysql_error());
?>
delete_mahasiswa.php
<?php
/**menghapus mahasiswa berdasarkan id*/
include
(
'connection.php'
);
$id
= (int)
$_GET
[
'id'
];
$query
=
'delete from mahasiswa where id = '
.
$id
;
$result
= mysql_query(
$query
)
or
die
(mysql_error());
if
(mysql_affected_rows() > 0){
echo
'deleted id = '
.
$id
;
}
else
{
echo
'NOT founnd id = '
.
$id
;
}
?>
Script PHP sudah selesai dan selanjutnya membuat aplikasi inti yaitu Android. Ada baiknya, sebelum membuat aplikasi android, kita test dulu apakah script PHP sudah bisa diakses dari emulator.
Caranya mudah, cukup buka browser dari emulator (AVD), dan bukalah urlhttp://10.0.2.2/android/index.php
10.0.2.2 adalah host default untuk mengakses server local.
Jika direktori dan file nya benar, server aktif dan MySQL aktif, maka tampilannya seperti gambar di atas, berari emulator sudah dapat mengakses localhost dan kita siap untuk membuat aplikasi Android.
3. Membuat aplikasi Android
Buatlah project Android seperti gambar berikut:
Pada project ini, kita membuat aplikasi dengan Min Requirement SDK adalah API 11 (Honeycomb) . Karena di aplikasi ini memiliki Action Bar (Action Bar hanya tersedia pada API 11 ke atas).
Secara default, Eclipse akan membuat 1 Activity dan 1 layout (MainActivity.java dan activity_main.xml).
a. Membuat object Mahasiswa
Yang pertama kita lakukan adalah membuat object Mahasiswa. Yha…. Mahasiswa, karena table yang dibuat sebelumnya adalah mahasiswa. Class Mahasiswa sangat membantu kita memanipulasi object. Salah satunya adalah konsep Object Relational Mapping (ORM) yang menggunakan object yang sama untuk memetakan table pada database.
Mahasiswa.java
package
org.pizaini.mahasiswaonline.entities;
public
class
Mahasiswa {
private
Integer id;
private
String nim;
private
String nama;
private
String telp;
private
String alamat;
public
Mahasiswa() {
super
();
}
public
Mahasiswa(Integer id, String nim, String nama, String telp,
String alamat) {
super
();
this
.id = id;
this
.nim = nim;
this
.nama = nama;
this
.telp = telp;
this
.alamat = alamat;
}
public
Integer getId() {
return
id;
}
public
void
setId(Integer id) {
this
.id = id;
}
public
String getNim() {
return
nim;
}
public
void
setNim(String nim) {
this
.nim = nim;
}
public
String getNama() {
return
nama;
}
public
void
setNama(String nama) {
this
.nama = nama;
}
public
String getTelp() {
return
telp;
}
public
void
setTelp(String telp) {
this
.telp = telp;
}
public
String getAlamat() {
return
alamat;
}
public
void
setAlamat(String alamat) {
this
.alamat = alamat;
}
}
b. Membuat class ServerRequest
Class ini akan kita gunakan berkomunikasi / melakukan request ke server. Pada class ini, kita membuat dua buah request, yaitu GET dan POST.
ServerRequest.java
package
org.pizaini.mahasiswaonline.server;
import
java.io.BufferedReader;
import
java.io.IOException;
import
java.io.InputStream;
import
java.io.InputStreamReader;
import
java.util.ArrayList;
import
java.util.List;
import
org.apache.http.HttpEntity;
import
org.apache.http.HttpResponse;
import
org.apache.http.HttpStatus;
import
org.apache.http.NameValuePair;
import
org.apache.http.StatusLine;
import
org.apache.http.client.HttpClient;
import
org.apache.http.client.entity.UrlEncodedFormEntity;
import
org.apache.http.client.methods.HttpGet;
import
org.apache.http.client.methods.HttpPost;
import
org.apache.http.impl.client.DefaultHttpClient;
import
org.apache.http.message.BasicNameValuePair;
import
org.apache.http.params.BasicHttpParams;
import
org.apache.http.params.HttpConnectionParams;
import
org.apache.http.params.HttpParams;
import
org.pizaini.mahasiswaonline.entities.Mahasiswa;
import
android.util.Log;
public
class
ServerRequest {
private
final
static
String TAG =
"ServerRequest"
;
public
static
final
String urlSelectAll =
"select_all.php"
;
public
static
final
String urlDelete =
"delete_mahasiswa.php"
;
public
static
final
String urlSubmit =
"submit_mahasiswa.php"
;
public
ServerRequest() {
super
();
}
/** Mengirimkan GET request */
public
String sendGetRequest(String reqUrl){
HttpClient httpClient;
HttpGet httpGet =
new
HttpGet(serverUri+
"/"
+reqUrl);
InputStream is =
null
;
StringBuilder stringBuilder =
new
StringBuilder();
try
{
HttpParams params =
new
BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(params,
3000
);
HttpConnectionParams.setSoTimeout(params,
3000
);
httpClient =
new
DefaultHttpClient(params);
Log.d(TAG,
"executing..."
);
HttpResponse httpResponse = httpClient.execute(httpGet);
StatusLine status = httpResponse.getStatusLine();
if
(status.getStatusCode() == HttpStatus.SC_OK && httpResponse !=
null
){
/** mengambil response string dari server */
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
BufferedReader reader =
new
BufferedReader(
new
InputStreamReader(is));
String line =
null
;
while
((line = reader.readLine()) !=
null
){
stringBuilder.append(line+
"\n"
);
}
is.close();
}
}
catch
(Exception e) {
Log.d(TAG, e.getMessage());
}
return
stringBuilder.toString();
}
/** Mengirimkan POST request */
public
int
sendPostRequest(Mahasiswa mahasiswa, String url){
int
replyCode =
99
;
HttpClient httpClient;
HttpPost post =
new
HttpPost(
this
.serverUri+
"/"
+url);
/** menambahkan parameter ke dalam request */
List<NameValuePair> value =
new
ArrayList<NameValuePair>();
value.add(
new
BasicNameValuePair(
"id"
, mahasiswa.getId().toString()));
value.add(
new
BasicNameValuePair(
"nim"
, mahasiswa.getNim()));
value.add(
new
BasicNameValuePair(
"nama"
, mahasiswa.getNama()));
value.add(
new
BasicNameValuePair(
"telp"
, mahasiswa.getTelp()));
value.add(
new
BasicNameValuePair(
"alamat"
, mahasiswa.getAlamat()));
try
{
HttpParams params =
new
BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(params,
3000
);
HttpConnectionParams.setSoTimeout(params,
3000
);
httpClient =
new
DefaultHttpClient(params);
post.setEntity(
new
UrlEncodedFormEntity(value));
Log.d(TAG,
"executing post..."
);
HttpResponse httpResponse = httpClient.execute(post);
StatusLine status = httpResponse.getStatusLine();
if
(status.getStatusCode() == HttpStatus.SC_OK){
Log.d(TAG,
"submitted sucessfully..."
);
replyCode = status.getStatusCode();
}
}
catch
(IOException e) {
Log.d(TAG, e.getMessage());
}
return
replyCode;
}
}
MainActivity akan kita gunakan untuk menampilkan ListView nama mahasiswa dan NIM. Seperti berikut:
RelativeLayout
xmlns:android
=
"http://schemas.android.com/apk/res/android"
xmlns:tools
=
"http://schemas.android.com/tools"
android:layout_width
=
"match_parent"
android:layout_height
=
"match_parent"
tools:context
=
".MainActivity"
>
<
ListView
android:id
=
"@+id/listview_main"
android:layout_width
=
"match_parent"
android:layout_height
=
"wrap_content"
android:dividerHeight
=
"1dp"
android:layout_margin
=
"5dp"
>
</
ListView
>
</
RelativeLayout
>
d. Tambahkan layout baru list_row.xml
Layout ini adalah custom ListView agar dapat menampilhan Nama dan NIM mahasiswa dalam ListView.
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
android:layout_width
=
"match_parent"
android:layout_height
=
"match_parent"
android:layout_margin
=
"5dp"
>
<
TextView
android:id
=
"@+id/text_nama"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
android:layout_alignParentLeft
=
"true"
android:layout_alignParentTop
=
"true"
android:text
=
"@string/app_name"
android:typeface
=
"sans"
android:textColor
=
"@android:color/background_dark"
android:textAppearance
=
"?android:attr/textAppearanceLarge"
/>
<
TextView
android:id
=
"@+id/text_nim"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
android:layout_alignParentLeft
=
"true"
android:text
=
"@string/app_name"
android:textColor
=
"@android:color/background_dark"
android:layout_below
=
"@+id/text_nama"
/>
</
RelativeLayout
>
e. Membuat List Adapter
Untuk menampilkan custom ListView, kita membutuhkan sebuah adapter yang inherit kepada BaseAdapter. ListAdapterMahasiswa juga meng-implements Filterable yang berguna saat melakukan pencarian. LisBerikut adalah potongan source code nya:
ListAdapterMahasiswa.java
0 komentar:
Posting Komentar