Android Telefon Yazılım Rom Destek Teknoloji Sitesi

Android Mobil Telefon Genel Bölüm => Android Genel Bölümü => Android Eğitim => Konuyu başlatan: Fuul oyun - 12 Nisan 2016, 03:42:11

Başlık: Android Programlama - .net Web Service Kullanımı
Gönderen: Fuul oyun - 12 Nisan 2016, 03:42:11

                        
Web servisler işimizi kolaylaştırmak için hazır bulunan ya da kendi isteklerimize göre oluşturduğumuz yapılardır. Android üzerinde .net platformunda oluşturulmuş web servisleri kullanmak için ksoap2 kütüphanesini kullanmamız gerekiyor. Fazla uzatmadan konuya girelim.
   
   indirmeniz gereken bir adet .jar dosyası var.
   
   Link : http://www.java2s.com/Code/JarDownload/ksoap2/ksoap2-android-assembly-2.5.7-jar-with-dependencies.jar.zip (http://www.java2s.com/Code/JarDownload/ksoap2/ksoap2-android-assembly-2.5.7-jar-with-dependencies.jar.zip)
   
   Zip içinden çıkan .jar dosyasını proje dosyalarınızın olduğu klasörde sırasıyla "projeniz>libs" klasörüne kopyalıyoruz. Bu işlemden sonra Eclipse içinden projenizi refresh edebilir ya da Eclipse i kapatıp tekrar açabilirsiniz.
   
   Gerekli kütüphanemizi ekledik. Şimdi Web Servis ile nasıl iletişim kuracağız ona bakalım.
   
   ksoap2 ye ait gerekli import işlemlerini yapalım.
   
   
[Seç][/url]import org.ksoap2.SoapEnvelope;
   import org.ksoap2.serialization.PropertyInfo;
   import org.ksoap2.serialization.SoapObject;
   import org.ksoap2.serialization.SoapSerializationEnvelope;
   import org.ksoap2.transport.HttpTransportSE;
   Daha sonra web servisimize ait bazı bilgileri Activitymiz içindeki değişkenlere atıyoruz.
   
       
[Seç][/url]private static final String NAMESPACE = "http://tempuri.org/";   
      private static final String URL = "http://WebServiceURLmiz.asmx";
       private static final String METHOD_NAME = "Web Servis içindeki kullanacağımız method ismi";
       private static final String SOAP_ACTION = "NAMESPACE+METHOD_NAME"; // örnek: http://deneme/webservice.asmx/kullanılacak_method
   Bir tane liste tanımlayacağım ki web service den dönen sonuçları liste içine atalım ve uygulamamızda kullanalım.
   
   
[Seç][/url]private String[] Liste;
   
[Seç][/url]private void denemeWebService(){
      SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); // istek oluşturuyoruz
       SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
       envelope.dotNet = true;   // .net servisi olduğunu belirtiyoruz   
       envelope.setOutputSoapObject(request);
       HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); // web servis urlmizi veriyoruz
       androidHttpTransport.debug = true;
       
      try {
          
      androidHttpTransport.call(SOAP_ACTION, envelope); //web servisi çağırdık
      SoapObject response = (SoapObject) envelope.getResponse(); //web service den gelecek sonuçları kullanmak için obje yarattık
      Liste = new String[response.getPropertyCount()]; // Listemizin countını web serviceden kaç tane sonuç dönecekse o kadar veriyoruz
   
      for(int i=0;i<response.getPropertyCount();i++){ //for ile gelen sonuçların içinde geziyoruz    
            Liste = response.getPropertyAsString(i).toString().trim();    //Sırasıyla string cinsinden gelen sonuçları listeye atıyoruz.
      }  
   }
       catch (Exception e) {       
          e.printStackTrace();
      }    
      }
   Web Service bağlantı fonksiyonumuz hazır. Yalnız bunu direk web servisi kullanacağımız yerde çağırarak kullanamıyoruz. Uzun sürecek bir işlem olduğu için "Kapatmaya zorla" hatası verecektir. Daha önce bahsettiğim AsyncTask yapısı içinde bu fonksiyonun çağırılması gerekli. AsyncTask nedir diyenler için ;
   
   Link : http://replikacep.com/android-programlama-asynctask-ve-arka-plan-islemleri-t11026.0.html (http://replikacep.com/android-programlama-asynctask-ve-arka-plan-islemleri-t11026.0.html)
   
   Yazıyı incelediyseniz AsyncTask yapısında doInBackground() kısmında fonksiyonumuzu çağırmamız gerekiyor.
   
   
[Seç][/url]public class denemeAsyncTask extends AsyncTask<String[],String[],String[]>{
   
           private ProgressDialog dialog = new ProgressDialog(this); // kullanıcıyı işlem sonuçlanana kadar bilgilendirmek için progress dialog oluşturuyoruz
         
         @Override
          protected void onPreExecute() {
             dialog.setMessage("Yükleniyor..."); // Yükleniyor mesajı veriyoruz
             dialog.show();
          }
         @Override
         protected String[] doInBackground(String[]... params) {
            denemeWebService(); // fonksiyonu çağırdık. İşlem yapılıyor.
            return Liste;
         }
         
         
         protected void onPostExecute(String[] Liste){
               // web servis işini bitirdi listeyi doldurdu.
            // listeyi ana thread de ne için kullanacaksak o işlemler burada yapılır.
               dialog.dismiss(); //en son olarak kullanıcıyı bilgilendirdiğimiz dialogu sonlandırıyoruz.
         }
      }
   Son olarak web servisimizi nerede kullanacaksak orada AsyncTask'ımızı çalıştırıyoruz.
   
   İşlem bu kadar (https://www.replikacep.com/proxy.php?request=http%3A%2F%2Freplikacep.com%2FSmileys%2Fsuperuser%2Fsmiley.gif%2522%2520class%3D%2522smiley.png&hash=10d243f4e2590142468a1f488152ebfb91670129)
   
   Bu örnekte anlatılanlar parametre istemeyen web servis methodları için geçerlidir.
   
   Parametre isteyen web servis methodları için fonksiyonumuza küçük bir ekleme yapacağız.
   
   
[Seç][/url]private void denemeWebService(String Param1,String Param2){
   
         PropertyInfo parametre1 = new PropertyInfo();
         parametre1.name= "name1"; // web service methodunun aldığı parametre adı ile aynı olmak zorunda.
         parametre1.setValue(Param1);
         parametre1.type = PropertyInfo.STRING_CLASS;
         
         PropertyInfo parametre2 = new PropertyInfo();
         parametre2.name= "name2"; // web service methodunun aldığı parametre adı ile aynı olmak zorunda.
         parametre2.setValue(Param2);
         parametre2.type = PropertyInfo.STRING_CLASS;
         
         SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
         request.addProperty(parametre1);
         request.addProperty(parametre2);
         
       SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
       envelope.bodyOut=request;
       envelope.dotNet = true;   
       envelope.setOutputSoapObject(request);
       
       HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
       androidHttpTransport.debug = true;
       
      try {
          
      androidHttpTransport.call(SOAP_ACTION, envelope);
      SoapObject response = (SoapObject) envelope.getResponse();
      Liste = new String[response.getPropertyCount()];
   
      for(int i=0;i<response.getPropertyCount();i++){     
            Liste = response.getPropertyAsString(i).toString().trim();   
      }  
   }
       catch (Exception e) {       
          e.printStackTrace();
      }
         
      }
   AsyncTask içinde fonksiyonumuzu çağırırken parametreleri göndermeyi unutmuyoruz (https://www.replikacep.com/proxy.php?request=http%3A%2F%2Freplikacep.com%2FSmileys%2Fsuperuser%2Fsmiley.gif%2522%2520class%3D%2522smiley.png&hash=10d243f4e2590142468a1f488152ebfb91670129)
   
   İşlem tamamdır kolay gelsin (https://www.replikacep.com/proxy.php?request=http%3A%2F%2Freplikacep.com%2FSmileys%2Fsuperuser%2Fsmiley.gif%2522%2520class%3D%2522smiley.png&hash=10d243f4e2590142468a1f488152ebfb91670129)
   
   Kaynak: http://blog.melihmucuk.com/android-programlama-dotnet-web-service-kullanimi/ (http://blog.melihmucuk.com/android-programlama-dotnet-web-service-kullanimi/)
                     
                  
                  
EhPortal 1.39.6 © 2025, WebDev