Merhabalar,

Bu yazımda Android ile web servis örneğinden bahsetmeye çalışacağım. Şimdiye kadar local de çalışan örnekler vermiştim. Bu uygulamada ise internette bulunan bir servis bağlayıcısına bağlanacağız. Bu servisimiz bize Fahreneit ve Celcius arasında convert işlemimizi sağlamaktadır.  Bağlanacağımız bu serviste veriyi alabilmek için ksoap2 kütüphanesini kullanacağız.  Bu kütüphaneyi indirebilmek için http://code.google.com/p/ksoap2-android/ adresine gitmeniz gerekmektedir.

Bu kütüphaneyi projemize eklemek için  projemize sağ tıklayıp “Build Path”den “Configure Build Path”e tıklıyoruz. Libraries sekmesinde “Add External JARs” butonuna tıklıyoruz. İndirmiş olduğunuz ksoap2.jar dosyasını ekliyoruz.

Kütüphaneyi projemize ekledikten sonra projemize başlayabiliriz. Buradaki bağlandığımız servis W3School’un Celsius – Fahrenheit ve Fahrenheit-Celcius dönüşümü servisidir. Bu servise erişim sağlamak için ilk olarak projemizdeki AndroidManifest.xml dosyasında aşağıdaki kod satırını ekliyoruz.

<uses-permission android:name=”android.permission.INTERNET”></uses-permission>

Bunu yaptıktan sonra main.xml dosyasında tasarımı aşağıdaki resimde olacak gibi yapıyoruz.

 

Main.xml dosyasındaki kod satırı aşağıdaki gibi olacaktır.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
				android:orientation="vertical" android:layout_width="fill_parent"
				android:layout_height="fill_parent"
				android:weightSum="1">
        <RadioGroup android:id="@+id/radioGroup1" android:layout_width="wrap_content" android:layout_height="wrap_content">
            <RadioButton android:layout_height="wrap_content" android:id="@+id/radio0" android:layout_width="wrap_content" android:text="CelciustoFahren" android:checked="true"></RadioButton>
            <RadioButton android:layout_height="wrap_content" android:id="@+id/radio1" android:layout_width="wrap_content" android:text="FahrentoCelcius"></RadioButton>
        </RadioGroup>
<LinearLayout android:id="@+id/linearLayout1" android:layout_width="wrap_content" android:layout_height="wrap_content">
    <EditText android:id="@+id/txtValue" android:layout_height="wrap_content" android:layout_width="186dp"></EditText>
    <Button android:layout_width="148dp" android:layout_gravity="center" android:layout_weight="0.01" android:layout_height="wrap_content" android:clickable="false" android:id="@+id/btncevir" android:text="Çevir"></Button>
</LinearLayout>
<LinearLayout  android:layout_height="wrap_content" android:id="@+id/linearLayout2" android:layout_width="wrap_content">
    <TextView android:text="Sonuç  :" android:id="@+id/textView1" android:layout_height="42dp" android:layout_width="64dp"></TextView>
    <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/lblResult"></TextView>
</LinearLayout>
</LinearLayout>

Daha sonra java dosyasında aşağıdaki kodu yazarak çalıştırıyoruz.

import java.io.IOException;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.SoapFault;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.EditText;
import android.widget.RadioGroup;

public class AndroidWSAccessActivity extends Activity implements OnClickListener {
	private Button cevirbutton;
    RadioButton myOption1, myOption2;
    private EditText valuText;
    private TextView result;
    final static String NAMESPACE = "http://tempuri.org/";
    final static String SERVICEURL = "http://www.w3schools.com/webservices/tempconvert.asmx";

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        cevirbutton = (Button) findViewById(R.id.btncevir);
        valuText = (EditText)findViewById(R.id.txtValue);
        result = (TextView)findViewById(R.id.lblResult);
        myOption1 = (RadioButton)findViewById(R.id.radio0);
        myOption2 = (RadioButton)findViewById(R.id.radio1);
        cevirbutton.setOnClickListener(this);
    }
    public void  onClick(View v)
    	{
    		if(myOption1.isChecked())
    		{
    			result.setText(invokeConverToCelciusWs() );
    		}
    	if (myOption2.isChecked()){
    		 result.setText(invokeConverToFahrenWs());
    	}
    	}
    public String invokeConverToCelciusWs()
    {
        String responseValue = "";
        //Webservisten istek için SoapObect oluşturuluyor ve  WebServiste hangi fonksiyon çalıştırılacak belirleniyor.
        SoapObject request = new SoapObject(NAMESPACE, "CelsiusToFahrenheit");
        //Invoke edeceğimiz foksiyona ait değişkenlere değer atıyor.
        request.addProperty("Celsius", valuText.getText().toString());
        //Kullanılacak versiyon bilgisi ile SoapSerializationEnvelope oluşturuyoruz.
        SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        soapEnvelope.dotNet = true;
        //İsteğimizi zarf'a koyuyoruz
        soapEnvelope.setOutputSoapObject(request);

        HttpTransportSE aht = new HttpTransportSE(SERVICEURL);
        try {
                //Bilgilerin hangi SoapAction'a yollayacağımızı ve hangi bilginin gönderileceğini ayarlıyoruz.
            aht.call("http://tempuri.org/CelsiusToFahrenheit", soapEnvelope);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        }
        try
        {
                //Gelen cevabı alıyoruz.
            responseValue = "Fahrenheit -> " + (SoapPrimitive) soapEnvelope.getResponse();
        } catch (SoapFault e) {
            e.printStackTrace();
        }
        return responseValue;
    }

    public String invokeConverToFahrenWs()
    {
        String responseValue = "";
        SoapObject request = new SoapObject(NAMESPACE, "FahrenheitToCelsius");
        request.addProperty("Fahrenheit", valuText.getText().toString());
        SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        soapEnvelope.dotNet = true;
        soapEnvelope.setOutputSoapObject(request);

        HttpTransportSE aht = new HttpTransportSE(SERVICEURL);
        try {
        aht.call("http://tempuri.org/FahrenheitToCelsius", soapEnvelope);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        }
        try
        {
        responseValue = "Celcius -> " + (SoapPrimitive) soapEnvelope.getResponse();
        } catch (SoapFault e) {
            e.printStackTrace();
        }
        return responseValue;
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event)
    {
        if(keyCode == KeyEvent.KEYCODE_BACK)
        {
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setMessage("Uygulamadan çıkmak istediğinize emin misiniz?")
                   .setCancelable(false)
                   .setPositiveButton("Evet", new DialogInterface.OnClickListener() {
                       public void onClick(DialogInterface dialog, int id) {
                    	   AndroidWSAccessActivity.this.finish();
                       }
                   })
                   .setNegativeButton("Hayır", new DialogInterface.OnClickListener() {
                       public void onClick(DialogInterface dialog, int id) {
                            dialog.cancel();
                       }
                   });
            AlertDialog alert = builder.create();
            alert.show();
            return true;
        }
        else
        {
            return super.onKeyDown(keyCode, event);
        }
    }

}

Projemizi çalıştırdığımızda aşağıdaki gibi bir görüntü elde edeceğiz.

Kaynak: http://www.kodfeed.com/android-ve-webservice/