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

Membuat Web Service Sederhana dengan nuSOAP

[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

Berawal dari postingan sebelumnya yang menanyakan perihal web service SOAP yang dibuat dengan PHP dan client pake Android. Rasa penasaran saya menuntun saya untuk mencoba membuat SOAP web service sederhana dan membuat Android clientnya
Kali ini akan saya bahas mengenai pembuatan web service servernya, sebagai informasi lingkungan development saya sebagai berikut:
Xubuntu 13.04 64 bit
paket mySQL 5.5.32
paket PHP 5.4.9
library nuSOAP 0.9.5, bisa diunduh di http://sourceforge.net/projects/nusoap/

Friday, September 16, 2011

[KonCod a.k.a Konsultasi Coding] Web Service nuSOAP

[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

Kali ini lain dari biasanya, Ardhi bakal ngasih KonCod alias konsultasi coding. Menanggapi codingan yang masuk ke inbox saya, singkat cerita terdapat seorang developer yang ingin membangun web service dengan PHP+nuSOAP. Dia memiliki basis data latihan yang di dalamnya terdapat tabel tb_user sebagai berikut:


Developer tersebut memiliki script login.php yang dimaksudkan untuk service login ke basis data sebagai berikut
<?php
require_once 'nusoap/lib/nusoap.php';
$server = new soap_server();
$server->configureWSDL("latihan","http://latihansaja/");
$server-->register(login);

function tes($param){
    $username= $param['username'];
    $password = $param['password'];
    $return_value[] =array('username'=>$username,'password'=>$password);
 return ($return_value);}

    function login(){
        mysql_connect('localhost','root','');
        mysql_select_db('latihan');
        $sql = mysql_query("select tb_user.username, tb_user.password from tb_user where username=’$username' and password =’$password' ");
        $return_data_count=mysql_num_rows($sql);
        //$return_data[]=array();
        while ($row=mysql_fetch_array($sql)){
            $return_data[]=array('username'=>$row['username'],'password'=> $row['password']);
        }
        $return['count']=$return_data_count;
        $return['data']=$return_data;
        return $return;

    }

$HTTP_RAW_POST_DATA = isset ($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA: " ";
$server->service($HTTP_RAW_POST_DATA);
?>

Namun saat dibuka di browser terdapat error seperti berikut ini

Setelah diselidiki, penyebabnya adalah penulisan $server-->register(login);
seharusnya adalah $server->register(login);

Setelah script diperbaiki, barulah diperoleh output yang diharapkan



Woke, segitu dulu KonCod kali ini
Selanjutnya akan saya bahas abis bagaimana menggunakan web service yang sudah dibangun tersebut :)
Salam programmer!

Tuesday, September 13, 2011

Yang Mungkin Belum Diketahui dari reCAPTCHA

reCAPTCHA adalah salah satu mekanisme yang umum digunakan untuk mencegah terjadinya spamming pada suatu website, di antaranya pada forum2 yang anggotanya aktif memposting. Seperti pada kaskus, agan2 pasti sudah akrab dengan penampakan ini



Sekilas tampak sangat ribet karena user harus mengetikkan kata yang panjang sebelum mengklik tombol Submit Comment. Namun tahukah anda bahwa reCAPTCHA ini tidaklah serumit yang terlihat :D

RAHASIAnya adalah : cukup mengetikkan 1 kata dari 2 kata yang terdapat dalam reCAPTCHA tersebut
1 kata yang harus diketikkan adalah kata yang terlihat sulit untuk dibaca, berikut ini contohnya





Pada contoh di atas, kata-kata yang harus dimasukkan adalah kata yang saya kasih tanda kotak merah, yaitu kata-kata yang dibuat sedikit susah dibaca. Sedangkan kata-kata yang lain adalah pemanis semata, tidak berpengaruh bila tidak kita ketikkan :) . Saya sudah berulang kali mencoba ini pada reCAPTCHA yang terdapat di kaskus dan hal ini sedikit mengefisienkan waktu posting :D

Entah ini semacam bug atau memang mekanismenya seperti itu, tidak tertutup kemungkinan developernya akan berbenah sehingga di waktu mendatang sangat mungkin mekanismenya berubah lagi

Thursday, September 01, 2011

Selamat Merayakan Hari Raya Idul Fitri

Ardhi mengucapkan Selamat Hari raya Idul Fitri 1432 H, semoga Allah SWT menerima amal ibadah kita, mengampuni dosa dan kekhilafan kita, serta semoga kita selalu dalam lindunganNya, amin..

ardhi.web.id. Powered by Blogger.