[diperbarui pada
12 Mei 2015]
PERHATIAN
Part 1 --
Membuat Web Service dengan NuSOAP
Pada postingan sebelumnya saya membuat
web service menggunakan pemrograman PHP dengan bantuan
library nuSOAP. Kali ini akan saya lanjutkan yaitu membuat
web service client dengan bahasa pemrograman Java di
platform Android yang akan memanggil
web service yang telah saya buat sebelumnya.
Untuk keperluan ini hendaknya teman-teman sudah menguasai konsep dasar pemrograman Java dan familiar dengan lingkungan
development Android SDK.
Sebagai informasi, lingkungan
development saya sebagai berikut:
Xubuntu 13.04 64 bit
Oracle J2SE SDK 1.6 update 45
Eclipse Indigo + Android Developer Tools plugin 22.2.1
Android SDK, informasi lebih lanjut silakan buka
http://developer.android.com
library ksoap2-android, bisa diunduh di
https://code.google.com/p/ksoap2-android/
Buka Eclipse, klik
File --> New --> Android Application Project untuk membuat project Android baru dan beri nama misalnya Soap_clients. Detailnya adalah seperti yang tertera di gambar berikut
Saya masih menggunakan SDK versi 2.3.3 (Gingerbread) untuk project ini karena emulator Android 2.3.3 lebih ringan untuk daripada versi yang lebih baru dijalankan di laptop saya :D.
Tambahkan baris kode berikut pada file AndroidManifest.xml agar aplikasi Android dapat mengakses jaringan
<uses-permission android:name="android.permission.INTERNET">
</uses-permission>
Jangan lupa untuk
mengimport library ksoap2-android ke Build Path project Android.
Selanjutnya edit file
res/layout/main.xml untuk membuat layout form yang dapat mengakomodasi proses input sederhana melalui elemen EditText dan menampilkan hasilnya ke TextView.
<?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" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="10dp"
android:text="Input : " />
<EditText
android:id="@+id/txtInput"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text">
<requestFocus />
</EditText>
<Button
android:id="@+id/bOK"
android:paddingTop="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Call Web Service" />
<TextView
android:paddingTop="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Output :" />
<TextView
android:id="@+id/txtOutput"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="**output here**"
android:textAppearance="?android:attr/textAppearanceSmall" />
</LinearLayout>
Nanti kita akan mendapatkan tampilan seperti ini
Langkah yang paling penting adalah membuat client SOAPnya, pertama masukkan variabel berikut ini yang nilai2nya bisa dilihat dari file WSDL web service yang telah dibuat sebelumnya
String NAMESPACE = "http://10.0.2.2/soap/hello";
String METHOD_NAME = "hello"; //nama fungsi dlm web service
String SOAP_ACTION = "http://10.0.2.2/nusoap/server2.php/hello";
//URL file WSDL web service
String URL = "http://10.0.2.2/nusoap/server2.php?wsdl";
Catatan :
10.0.2.2 adalah alamat
localhost komputer yang akan diakses emulator Android karena emulator Android tidak dapat mengakses domain
localhost
Kemudian masukkan nilai parameter
name yang mau dikirim ke
web service, sorce codenya seperti berikut
SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME);
PropertyInfo pi = new PropertyInfo();
pi.setName("name");
pi.setValue(input);
pi.setType(String.class);
Request.addProperty(pi);
Terakhir adalah memanggil
web service, dan menampilkan responnya ke suatu variabel String dengan
source code seperti di bawah ini
SoapSerializationEnvelope envelope
= new SoapSerializationEnvelope(SoapEnvelope.VER11);
//envelope.dotNet = true; //aktifkan bila web service dibuat dengan .NET
envelope.setOutputSoapObject(Request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
try{
androidHttpTransport.call(SOAP_ACTION, envelope);
Object response = envelope.getResponse();
String result = response.toString();
} catch (Exception e) {
e.printStackTrace();
}
Source code lengkapnya adalah seperti berikut File Soap_clientActivity.java
package soap.client;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class Soap_clientActivity extends Activity {
String NAMESPACE = "http://10.0.2.2/soap/hello";
String METHOD_NAME = "hello";
String SOAP_ACTION = "http://10.0.2.2/nusoap/server2.php/hello";
String URL = "http://10.0.2.2/nusoap/server2.php?wsdl";
String input = null;
TextView tvOutput;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final EditText etInput = (EditText) findViewById(R.id.etInput);
Button bOK = (Button) findViewById(R.id.bOK);
tvOutput = (TextView) findViewById(R.id.tvOut);
bOK.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
input = etInput.getText().toString();
getSoap();
}
});
}
private void getSoap(){
SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME);
PropertyInfo pi = new PropertyInfo();
pi.setName("name");
pi.setValue(input);
pi.setType(String.class);
Request.addProperty(pi);
SoapSerializationEnvelope envelope
= new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(Request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
try
{
androidHttpTransport.call(SOAP_ACTION, envelope);
Object response = envelope.getResponse();
String result = response.toString();
//System.out.println(result);
tvOutput.setText(result);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
Hasilnya dapat dilihat dalam
screenshot berikut
Gimana, cukup mudah bukan?
Web Service ini dapat dikembangkan lebih kompleks lagi misalnya dengan dihubungkan ke suatu
database
Oke, semoga bermanfaat
Jika ada yang kurang jelas, silakan ninggal komen ;)