30 Ekim 2014 Perşembe

Android Web Servis Kullanımı


Merhaba arkadaşlar, .net web servislerinin android te nasıl kullanılacağından bahsedeceğim.  Bunun için http://www.webservicex.net/ sitesinde sunulan ağırlık birimleri arası dönüşüm yapan basit bir servisi kullanacağız. Bu servis .net ile yazılmış web servisidir. Bunu bilmekte fayda var çünkü java ile yazılmış servislerin kullanımı biraz daha farklı.

Öncelikle Android de web servislerini kullanabilmemiz için ksoap2 kütüphanesine ihtiyaç var. Bu kütüphaneyi buradan indirerek projemize import ediyoruz. Bunun için önce indirdiğimiz .jar dosyamızı projemizde libs klasörünün altına kopyalayalım, ardından projemizin üzerine gelerek sağ tıklayıp Build Path > Add External Archives.. seçeneğini seçiyoruz. İndirdiğimiz ksopa2 jar’ını göstererek ekliyoruz.



Aşağıda kullanacağımız servisin açıklamalarını verdim. Uygulamada kullanacağımız servis değişkenleri şu şekilde.





NAMESPACE = “http://www.webserviceX.NET/
URL = “http://www.webservicex.net/ConvertWeight.asmx”
METHOD_NAME = “ConvertWeight”
SOAP_ACTION = NAMESPACE + METHOD_NAME 



Şimdi servisi uygulamamızda nasıl kullanacağımıza geçebiliriz. Ben basit bir uygulama ile servisten dönen cevabı bir text içerisinde göstereceğim. Siz kendi uygulamanıza göre uyarlarsınız. Proje structure olarak resimde verildiği şekliyle.















1) Öncelikle layout’umuzu oluşturalım. Ben servise parametre olarak geçeceğimiz değerleri alacağım 3 textbox ve servis çağrısı yapacağımız bir buton kullanıyorum ve servis cevabını gösterebileceğim bir label ekliyorum. 




    

    

    

    

    

    

    


2) Servis bağlantımı oluşturacağım WebServiceCall sınıfımı oluşturuyorum.  Bu sınıf içerisinde Soap requestimi oluşturuyor varsa gerekli request parametrelerimi, servis kullanıcı adı ve parolamı set ediyorum. Bu servisimizde kullanıcı adı ve parola istemediği için SOAP header 'ına müdahale etmedik. Ancak başka yazımda ele aldım. Buradan (Servis Kullanıcı Adı ve Parola Set Etme) servis header parametrelerinin nasıl set edileceğine ulaşabilirsiniz.


package com.ahmetbz.usingwebservices;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.AndroidHttpTransport;
import org.kxml2.kdom.Element;
import org.kxml2.kdom.Node;

public class WebServiceCall {

    String NAMESPACE = "http://www.webserviceX.NET/";
    private String URL = "http://www.webservicex.net/ConvertWeight.asmx";
    String METHOD_NAME = "ConvertWeight";
    String SOAP_ACTION;
    SoapObject request = null, objMessages = null;
    SoapSerializationEnvelope envelope;
    AndroidHttpTransport androidHttpTransport;
     
    WebServiceCall() {
    }

    protected void SetEnvelope() {
         
        try {
             
            // Creating SOAP envelope          
            envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
             
            //You can comment that line if your web service is not .NET one.
            envelope.dotNet = true;
            
            envelope.setOutputSoapObject(request);
            androidHttpTransport = new AndroidHttpTransport(URL);
            androidHttpTransport.debug = true;
             
        } catch (Exception e) {
            System.out.println("Soap Exception---->>>" + e.toString());   
        }
    }
    
    // MethodName variable is define for which webservice function  will call
    public String getConvertedWeight(String weight, String fromUnit, String toUnit)
      {
         
        try {
            SOAP_ACTION = NAMESPACE + METHOD_NAME;
             
            //Adding values to request object
            request = new SoapObject(NAMESPACE, METHOD_NAME);
            

            //Adding Double value to request object
            PropertyInfo weightProp =new PropertyInfo();
            weightProp.setName("Weight");
            weightProp.setValue(weight);
            weightProp.setType(double.class);
            request.addProperty(weightProp);
             
            //Adding String value to request object
            request.addProperty("FromUnit", "" + fromUnit);
            request.addProperty("ToUnit", "" + toUnit);
            
            SetEnvelope();
             
            try {
                 
                //SOAP calling webservice
                androidHttpTransport.call(SOAP_ACTION, envelope);
                 
                //Got Webservice response
                SoapPrimitive response = (SoapPrimitive)envelope.getResponse();
 
                return response.toString();
                 
            } catch (Exception e) {
                // TODO: handle exception
                return e.toString();
            }
        } catch (Exception e) {
            // TODO: handle exception
            return e.toString();
        }
 
    }

}


3) Butona tıklayınca servis çağrısı yapacağım DotNetWebServiceActivity sınıfımda hazırladığım layottan servise göndereceğim parametreleri alıyorum ve servis çağrısını yaparak dönen değeri labelda gösteriyorum.

package com.ahmetbz.usingwebservices;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class DotNetWebServiceActivity extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.mainlayout);
          
         final Button webserviceCallButton = (Button) findViewById(R.id.callServiceButton);
         final EditText weightEditText = (EditText) findViewById(R.id.weightEditText);
         final EditText fromUnitEditText = (EditText) findViewById(R.id.fromUnitEditText);
         final EditText toUnitEditText = (EditText) findViewById(R.id.toUnitEditText);
         final TextView webserviceResponse = (TextView) findViewById(R.id.serviceResponseTextView);
          
         webserviceCallButton.setOnClickListener(new OnClickListener() {
             public void onClick(View v) {
                  
                 webserviceResponse.setText("Requesting to server .....");
                  
                 //Create Webservice class object
                 WebServiceCall service = new WebServiceCall();
                  
                 // Initialize variables
                 String weight   = weightEditText.getText().toString();
                 String fromUnit = fromUnitEditText.getText().toString();
                 String toUnit   = toUnitEditText.getText().toString();
                  
                 //Call Webservice class method and pass values and get response
                 String aResponse = service.getConvertedWeight(weight, fromUnit, toUnit);  
                     
                 Log.i("AndroidExampleOutput", "----"+aResponse);
                  
                 webserviceResponse.setText("Service Response : "+aResponse);
             }
         });
       
 }

}


4) AndroidManifest.xml dosyamızda Activity’i kaydetmeyi ve internet iznini vermeyi unutmayalım.



    
 
    
        
            
                
                
            
        
    
 






Evet arkadaşlar, uygulamaızı çalıştırıp ilgili değerleri girdiğimizde sonucun döndüğünü görebiliriz.

Hiç yorum yok :

Yorum Gönder