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.
Hiç yorum yok :
Yorum Gönder