Client Server Android
Client Server Android
USING JSON
Project 1: Membuat Program Client Server Android Dengan Web Server
Output :
206
Langkah pertama dalam project ini adalah membuat Web Server menggunakan Apache
sebagai Server, MySQL untuk database dan PHP untuk bahasa script Web Server.
Pertama install dahulu XAMPP untuk Server dan Database (Apache , MySQL). Klik
ganda pada installer XAMPP yang telah didownload maka akan muncul window
setup XAMPP seperti pada gambar 6.2.
207
Untuk mencoba apakah Web Server telah terinstall dan dapat berfungsi, buka Web
Browser (Mozilla Firefox / Google Chrome / Opera / Internet Explorer) dan pada link
address ketik localhost atau bisa juga 127.0.0.1 maka akan muncul menu splash
XAMPP untuk memilih bahasa yang digunakan.
Setelah itu, klik pada database yang baru dibuat yaitu dbserver pada sisi kiri jendela
kerja phpMyAdmin. Setelah itu akan muncul menu pembuatan table baru pada
database, ini dengan nama datachat untuk nama table dan isi angka 3 pada number of
columns seperti pada gambar 1.9.
10
Setelah itu simpan table yang dibuat dengan mengklik button Save pada bagian
bawah seperti gambar 1.11.
koneksi.php
<?php
$host = "localhost";
$user = "root";
$password = "";
$database = "dbserver";
mysql_connect($host,$user,$password);
mysql_select_db($database);
?>
Script PHP diatas berfungsi untuk menghubungkan database dbserver dan webserver
dengan program dari script PHP. Selanjutnya buatlah file baru dengan nama chatserver.php dan isikan dengan script PHP dibawah ini :
chat-server.php
<?php
include("koneksi.php");
$q = mysql_query('SELECT * FROM datachat');
$v = '{"chat" : [';
while($r=mysql_fetch_array($q)) {
$ob = array('"','<br>','</br>');
if(strlen($v)<15) {
.=
']}'; echo
$v; ?>
Script PHP diatas berfungsi untuk mengirimkan data yang ada pada database dbserver
ke client yang terhubung dengan WebServer. Selanjutnya buatlah file baru dengan
nama chat-pesan.php dan isikan dengan script PHP dibawah ini :
212
chat-pesan.php
<?php
$link = mysql_connect('localhost', 'root', '') or die('Cannot connect to the
DB'); mysql_select_db('dbserver', $link) or die('Cannot select the DB');
$query = "INSERT INTO datachat(nama,pesan) VALUES ('$_POST
[nama]','$_POST[pesan]')";
$result = mysql_query($query, $link) or die('Error query: '.
$query); ?>
Script PHP diatas berfungsi untuk menginput data pesan yang diterima dari client
android ke database dbserver.
Langkah selanjutnya adalah mengkonfigurasi Wireless Router untuk menghubungkan
device Android dengan Server dengan menggunakan topologi seperti pada gambar
1.12 dibawah.
213
: 192.168.2.2
Subnet Mask
: 255.255.255.0
Default Gateway
: 192.168.2.1
Pada Target SDK dan Compile With pilih Android 4.2 (Jelly Bean)
Theme : none
Kemudian klik Next hingga window Blank Activity, isikan nama activity dengan
MainActivity dan nama layout dengan activity_main.
8. Buat folder dengan nama drawable pada res dan copy semua gambar yang dibutuhkan
ke dalam folder tersebut
9.Setelah itu akan terbentuk file MainActivity.java didalam folder src dan juga terdapat
activity_main.xml didalam folder res/layout. Selanjutnya adalah membuat layout
untuk program, buka folder res/layout dan klik ganda pada file activity_main.xml,
dan ganti dengan kode XML activity_main.xml pada komputer server.
activity_main.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="vertical">
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent
" android:layout_height="360dp"
/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@android:id/list"
>
<Button
android:id="@+id/cha
t"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="tr
ue"
android:layout_alignParentLeft="true"
android:text="Chat" />
<Button
android:id="@+id/refres
h"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="tr
ue"
android:layout_centerHorizontal="true
" android:text="Refresh" />
<Button
android:id="@+id/kelua
r"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="tr
ue"
android:layout_alignParentRight="true
" android:text="Keluar" />
</RelativeLayout
> </RelativeLayout>
Buatlah dua buah file XML baru dengan nama baca_activity.xml dan kirim_activity.xml.
Kemudian, copy dan paste isi layout add.xml dan list_item.xml dengan kode XML
yang ada pada komputer server.
baca_activity.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/ti
ga"> <ScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:layout_width="match_paren
t"
android:layout_height="match_pare
nt" android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="fill_parent"
android:layout_height="wrap_conten
t"
android:layout_alignParentLeft="true
"
android:layout_alignParentTop="true
" android:text="Cippher Text"
android:textAppearance="?android:attr/textAppearanceLarge" />
<EditText
android:id="@+id/txt_cippher"
android:layout_width="fill_parent
" android:layout_height="86dp"
android:ems="10"
android:inputType="textMultiLine" />
<TextView
android:id="@+id/TextView01"
android:layout_width="fill_parent
"
android:layout_height="wrap_conte
nt" android:text="Plaint Text"
android:textAppearance="?android:attr/textAppearanceLarge" />
<EditText
android:id="@+id/txt_plain
"
android:layout_width="fill_parent"
android:layout_height="99dp"
android:ems="10"
android:inputType="textMultiLine" /
>
<Button
android:id="@+id/btn_subm
it"
android:layout_width="fill_parent"
android:layout_height="wrap_conte
nt" android:layout_x="191dp"
android:layout_y="386dp"
android:text="Submit" />
<Button
android:id="@+id/btn_refres
h"
android:layout_width="fill_parent"
android:layout_height="wrap_conte
nt" android:text="Refresh" />
</LinearLayout
> </ScrollView>
</LinearLayout>
baca_activity.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/ti
ga"> <ScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:layout_width="match_paren
t"
android:layout_height="match_pare
nt" android:orientation="vertical" >
<TextView
android:id="@+id/TextView01"
android:layout_width="fill_parent
"
android:layout_height="wrap_conte
nt" android:text="Kirim Pesan"
android:textAppearance="?android:attr/textAppearanceLarge" />
<EditText
android:id="@+id/txt_sen
d"
android:layout_width="fill_parent"
android:layout_height="99dp"
android:ems="10"
android:inputType="textMultiLine" /
>
<Button
219
android:id="@+id/kirim"
android:layout_width="fill_parent"
android:layout_height="wrap_conte
nt" android:text="Kirim" />
</LinearLayout
> </ScrollView>
</LinearLayout>
Langkah selanjutnya membuat program untuk menjadi class parser JSON. Buat file
Java baru dengan nama JSONParser.java. Buka file java JSONParser.java kemudian
ganti dengan kode pada komputer server.
JSONParser.java
package com.acsl.clientproject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import
java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import org.apache.http.HttpEntity;
import
org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;
import android.util.Log;
public class JSONParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
220
} catch (ClientProtocolException e)
{ e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
try {
BufferedReader reader = new BufferedReader(new
InputStreamReader( is, "UTF-8"), 8);
StringBuilder sb = new
StringBuilder(); String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
json =
sb.toString(); } catch
(Exception e) {
return jObj;
Langkah selanjutnya membuat program untuk menjadi class parser cryptography. Buat
file Java baru dengan nama EncryptDecrypt.java. Buka file java
EncryptDecrypt.java kemudian ganti dengan kode pada komputer server.
EncryptDecrypt.java
package
com.acsl.clientproject; import
java.util.Arrays;
public class EncryptDecrypt
{ static String
SharedKEY =
"Q|W|E|R|T|Y|U|I|I|O|P|A|S|D|F|G|H|J|K|L|Z|X|C|V|B|N|M|b|n|m|!|
|@|#|5|q|w|e|r|t|y|u|i|o|p|a|s|d|f|g|h|j|k|l|z|x|c|v|4|3|2|1|6|7|,|.|0|)|(|*|?|&|^|%| 8|9|$";
221
HURUFINDOARR[Arrays.asList(SHAREDKEYARR).indexOf(tempcoy[i])];
}
String str_enc = merubahAscii(tempEnc);
return str_enc;
}
return kataTambah;
}
222
Selanjutnya membuat program untuk koneksi ke Server, buka folder src kemudian klik dua
kali pada MainActivity.java, copy dan paste source code AksesMain.java pada komputer
server dan isikan blok program yang kosong.
MainActivity.java
package com.acsl.clientproject;
import android.os.Bundle;
import android.app.Activity;
import
android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
//code 2
Button b_baca = (Button)findViewById(R.id. R.id.btn_baca);
Button b_kirim = (Button)findViewById(R.id. R.id.btn_kirim);
//code 3
b_baca.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i = new Intent(MainActivity.this,
BacaActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY)
; startActivity(i);
}
});
//code 4
b_kirim.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent ij = new Intent(MainActivity.this,
KirimActivity.class);
ij.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(ij);
});
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is
present.
getMenuInflater().inflate(R.menu.main,
menu); return true;
}
}
Pada kode 3 isi dengan nama masing2 aktifiti yang akan berpindah
Setelah program pada KirimActivity.java selesai, maka lanjutkan dengan membuat file
Java baru dengan nama KirimActivity.java. Buka file java AddActivity.java
kemudian ganti dengan kode pada komputer server.
KirimActivity.java
package com.acsl.clientproject;
import android.app.Activity;
import
android.app.AlertDialog;
import
android.content.Context;
import
android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import
android.widget.EditText;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
224
import
org.apache.http.client.entity.UrlEncodedFormEntity;
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;
findViewById(R.id.
=
(Button)
ende
=
new
Kirim.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View arg0)
{ new Thread(new Runnable()
{
public void run() {
int TIMEOUT_MILLISEC = 30000;
HttpParams httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpPa
rams,
TIMEOUT_MILLISEC);
HttpConnectionParams.setSoTimeout(httpParams,
TIMEOUT_MILLISEC);
ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("nama",
"")); nameValuePairs.add(new
BasicNameValuePair("pesan",
postnya.setEntity(new
UrlEncodedFormEntity(nameValuePairs));
client.execute(postnya);
}
catch(Exception e)
{ e.printStackTrac
e();
}
225
}
}).start();
//coba
AlertDialog.Builder alertDialogBuilder =
new AlertDialog.Builder(context);
alertDialogBuilder.setTitle("Notifikasi");
alertDialogBuilder
.setMessage("Pesan Telah Dikirim Ke Server!")
.setCancelable(false)
.setPositiveButton("OK",new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog,int id) {
Intent back = new
Intent(com.acsl.clientproject.KirimActivity.this,
com.acsl.clientproject.MainActivity.class);
back.addFlags(Intent.FLAG_ACTIVITY_NO_HISTO
RY); startActivity(back);
}
});
AlertDialog alertDialog =
alertDialogBuilder.create(); alertDialog.show();
}
});
}
226
Setelah program pada BacaActivity.java selesai, maka lanjutkan dengan membuat file
Java baru dengan nama BacaActivity.java. Buka file java AddActivity.java
kemudian ganti dengan kode pada komputer server.
BacaActivity.java
package com.ascl.clientproject;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.os.Bundle;
import
android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.Context;
import
android.content.DialogInterface;
import android.content.Intent;
import
android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.view.View;
import android.widget.Button;
import
android.widget.EditText;
import android.widget.ListAdapter;
import
android.widget.SimpleAdapter;
import org.json.JSONArray;
import
org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.HashMap;
//code 1
setContentView(R.layout.
baca_activity);
227
AlertDialog.Builder alertDialogBuilder =
new AlertDialog.Builder(context);
alertDialogBuilder.setTitle("Notifikasi : Koneksi Error");
alertDialogBuilder
.setMessage("Periksa Konektifitas Jaringan Device!")
.setCancelable(false)
.setPositiveButton("OK",new
DialogInterface.OnClickListener() { public void
onClick(DialogInterface dialog,int id) {
Intent close = new
Intent(Intent.ACTION_MAIN);
close.addCategory(Intent.CATEGORY_HOME);
close.setFlags(Intent.FLAG_ACTIVITY_NEW_TAS
K); startActivity(close);
}
});
}
//jaringan true
if(true){
new Thread(new
Runnable() { public void
run() {
//code 2
//isi dengan penurunan class JsonParser
JSONParser jParser = new JSONParser();
//isi dengan variable turunan json
paser
JSONObject
json
=
jParser.getJSONFromUrl(server); try {
chat = json.getJSONArray("chat");
for(int i = 0; i < chat.length(); i++){
JSONObject objjson =
chat.getJSONObject(i); String id =
objjson.getString(ID);
String nama = objjson.getString(NAMA);
String pesan =
objjson.getString(PESAN);
catch (NullPointerException e)
{ e.printStackTrace(); }
catch (RuntimeException e)
{ e.printStackTrace();
228
}
}
}).start();
//code 3
//isi dengan class yang digunakan
untuk ende = new EncryptDecrypt ();
b_submit.setOnClickListener(new
View.OnClickListener()
@Override
public void onClick(View v) {
// TODO Auto-generated method
stub //ini untuk translate pesan
ed_plain.setText(ende.decrpt(ed_cippher.getText().toString()));
}
});
b_refresh.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent refresh = new
Intent(BacaActivity.this, BacaActivity.class);
refresh.addFlags(Intent.FLAG_ACTIVITY_NO_HISTO
RY); startActivity(refresh);
}
});
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is
present.
getMenuInflater().inflate(R.menu.main,
menu); return true;
}
229
netInfo = cm.getNetworkInfo(1);
if(netInfo.getState()==NetworkInfo.State.CONNE
CTED){
status =
true; }else
status = false;
return status;
}
}
android:name=".KirimActivity"></activity>
android:name=".BacaActivity"></activity>
android:name=".JSONParser"></activity>
android:name=".EncryptDecrypt"></activity>
Berikut adalah kode yang ditambahkan untuk mendefinisikan Permission pada file
AndroidManifest.xml :
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
Tag kode Activity harus ditambahkan dibawah tag penutup activity default </activity>.
230
Untuk
Tag
kode
</application>.
Permission
ditambahkan
dibawah
tag penutup
application
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.acsl.clientproject"
android:versionCode="1"
android:versionName="1.0
">
<uses-sdk
android:minSdkVersion=
"8"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launch
er"
android:label="@string/app_name"
android:theme="@style/AppTheme"
> <activity
android:name="com.acsl.clientproject.MainActivit
y" android:label="@string/app_name" > <intentfilter>
</application>
<uses-permission
android:name="android.permission.INTERNET" /> <usespermission
android:name="android.permission.ACCESS_NETWORK_S
TATE"/> </manifest>
Setelah menambahkan tag activity dan permission untuk mendefinisikan Class tambahan
tersebut maka Running Project untuk melihat output dengan cara klik kanan pada
Project > Run As > Android Project atau dengan mengklik simbol
Eclipse.
pada toolbar