Tuesday, September 20, 2011

Membuat Web Service Client Sederhana di Android

[diperbarui pada 12 Mei 2015]

PERHATIAN
melihat perkembangan saat ini untuk membuat web service saya menyarankan untuk migrasi ke RESTful web service http://www.ardhi.web.id/2015/05/web-service-php-menggunakan-slim_11.html, saya sudah tidak akan membuat artikel baru tentang pembuatan web service menggunakan SOAP

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 ;)

9 comments:

ranid production said...

PropertyInfo pi = new PropertyInfo();
pi.setName("name");
pi.setValue(input);
pi.setType(String.class);
Request.addProperty(pi);



error gan....

AimaR said...
This comment has been removed by the author.
AimaR said...

Mas Bro....
ada contoh untuk Client di Blackberry kah?
Thx...

ardhi wijayanto said...

wah enggak ada bro, saya ga menekuni blekberi

AimaR said...

Oo... Okelah MasBro...
tq...
tapi template yg skrg kurang nyaman MasBro ketimbang masih di blogspot kemarin.... :D
just my opinion....

ardhi wijayanto said...

ini masih blogspot kok, cuman pake custom domain
bosen sama tampilan kemaren, eh ganti yang ini syntax highlighternya ga jalan
belum ada waktu buat maintenis lagi gan

AimaR said...

MasBro.... pernah coba buat client yang menampilkan isi database ?
misalnya kan ada db user, nah di clientnya bisa nampilin daftar usernya.....
bisa kasih tutorial kah MasBro?

ardhi wijayanto said...

sorry, belum sempat buat tutorial lagi bro
sudah pernah buat sih, tapi belum ada waktu buat nulis aja
silakan bergoogling ria :)

Tips Tutorial said...

infomasi ini penting bagi siapa saja yang membutuhkannya karena selain tulisannya mudah dipahami, infonya juga lengkap sekali

Post a Comment

ardhi.web.id. Powered by Blogger.