Android Studio Ksoap2 ile Web Servis Kullanımı

Web Servisleri HTTP protokolü ile XML gönderip alarak iki uzak cihaz arasındaki iletişimi sağlayan bir haberleşme yöntemidir. XML olması sayesinde değişik platformalar ve programalama dilleri arasında haberleşme sağlanabilir. Web servislerinde veriler XML olarak tutulur ve SOAP kullanılarak bir yerden diğerine taşınır. Web servislerinin yapısı itibariyle farklı platformlarda çalışan uygulamar birbiri ile haberleşebilirler. Daha fazla teorik bilgi için internette arama yapabilirsiniz biz daha çok web servisin nasıl kullanabileceğimize bakacağız.
Bu makalemizde Ksoap2 kütüphanesini kullanarak Nüfüs ve Vatandaşlık İşleri Genel Müdürlüğünün sağlamış olduğu web servis üzerinden nasıl kimlik doğrulama işlemlerini gerçekleştirebileceğimize bakacağız. Web servisi ile ilgili işlemlerin yapılacağı siteye buraya tıklayarak göz atabilirsiniz.
Öncelikle yeni proje oluşturalım ve Ksoap2 kütüphanesini aşağıdaki gibi projemize dahil edelim.
AndroidManifest.xml dosyamızı açıp aşağıdaki izni ekleyelim.
1 |
<uses-permission android:name="android.permission.INTERNET"/> |
Gerekli kurulumları ve ayarlamaları yaptığımıza göre artık anlatıma geçebiliriz. Manuel olarak gelen activity_main.xml dosyamızı aşağıdaki gibi düzenleyelim.
activity_main.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.esatgozcu.androidstudioksoap2tutorial.MainActivity"> <EditText android:id="@+id/tcText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="84dp" android:ems="10" android:hint="TC No." android:inputType="textPersonName" app:layout_constraintHorizontal_bias="0.502" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> <EditText android:id="@+id/nameText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="34dp" android:ems="10" android:hint="İsim " android:inputType="textPersonName" app:layout_constraintHorizontal_bias="0.502" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@+id/tcText" /> <EditText android:id="@+id/surnameText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="34dp" android:ems="10" android:hint="Soyisim" android:inputType="textPersonName" app:layout_constraintHorizontal_bias="0.502" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@+id/nameText" /> <EditText android:id="@+id/yearText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="34dp" android:ems="10" android:hint="Doğum Yılı" android:inputType="textPersonName" app:layout_constraintHorizontal_bias="0.502" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@+id/surnameText" /> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="58dp" android:layout_marginTop="40dp" android:onClick="button" android:text="Doğrula" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@+id/yearText" /> </android.support.constraint.ConstraintLayout> |
Kullandığımız web servis isim ve soy isim bilgilerinin bütün harflerini büyük olarak göndermemizi istiyor aksi takdirde uygulamamız çalışmayacaktır aşağıdaki kodların arasında bunun önlemini nasıl alabileceğimizi anlattım. Ayrıca doğum tarihi değil doğum yılı olduğuna dikkat edelim yani 4 haneli bir sayı gitmesi gerekiyor.
MainActivity.java sınıfımızı aşağıdaki gibi düzenleyelim.
MainActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
package com.example.esatgozcu.androidstudioksoap2tutorial; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.DialogInterface; import android.os.AsyncTask; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.EditText; import org.ksoap2.SoapEnvelope; import org.ksoap2.serialization.SoapObject; import org.ksoap2.serialization.SoapSerializationEnvelope; import org.ksoap2.transport.HttpTransportSE; import java.util.Locale; public class MainActivity extends AppCompatActivity { EditText tcText; EditText nameText; EditText surnameText; EditText yearText; private static final String NAMESPACE = "http://tckimlik.nvi.gov.tr/WS"; private static final String URL = "https://tckimlik.nvi.gov.tr/Service/KPSPublic.asmx"; private static final String SOAP_ACTION = "http://tckimlik.nvi.gov.tr/WS/TCKimlikNoDogrula"; private static final String METHOD_NAME = "TCKimlikNoDogrula"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tcText = (EditText)findViewById(R.id.tcText); nameText=(EditText)findViewById(R.id.nameText); surnameText = (EditText)findViewById(R.id.surnameText); yearText = (EditText)findViewById(R.id.yearText); } public void button (View view) { // Bir metin içerisindeki boşluklardan kurtulmak için trim metodu kullanılır. // trim() metodu, metnin sonunda ve başında yer alan boşlukları yok ederken // kelime aralarındaki boşluklara dokunmaz. String tcString = tcText.getText().toString().trim(); // Bir büyük harflere çevirmek için toUpperCase() methodu kullanılır. // Uygulamada verilerin isim ve soyisimin bütün harfleri büyük olması gerekiyor. String nameString = nameText.getText().toString().trim().toUpperCase(new Locale("tr_TR")); String surnameString = surnameText.getText().toString().trim().toUpperCase(new Locale("tr_TR")); String yearString = yearText.getText().toString().trim(); new asynTask().execute(tcString,nameString,surnameString,yearString); } private class asynTask extends AsyncTask<String,Void,Void>{ String resultText; Boolean result; ProgressDialog progressDialog = new ProgressDialog(MainActivity.this); AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); AlertDialog alert; // Doğrula butonuna basıldığında ilk yapılacaklar.. @Override protected void onPreExecute() { // ProgressDialog oluşturuyoruz. progressDialog.setMessage("Kontrol ediliyor..."); progressDialog.show(); } // Doğrula butonuna basıldığında arka planda yapılacaklar.. @Override protected Void doInBackground(String... strings) { // Sorgumuzu oluşturuyoruz.. SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME); Request.addProperty("TCKimlikNo",strings[0]); Request.addProperty("Ad", strings[1]); Request.addProperty("Soyad", strings[2]); Request.addProperty("DogumYili", strings[3]); // SoapEnvelope oluşturduk ve Soap 1.1 kullanacağımız belirttik. SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.dotNet = true; // Envelope ile requesti birbiri ile bağladık. envelope.setOutputSoapObject(Request); HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); try { // Web servisi çağırdık androidHttpTransport.call(SOAP_ACTION, envelope); // Gelen verileri değerlendirmek için objemizi oluşturuyoruz. SoapObject response = (SoapObject) envelope.bodyIn; result = Boolean.parseBoolean(response.getProperty(0).toString()); // Gelen sonucu değerlendiriyoruz. if(result) { resultText ="Sisteme Kayıtlı Kullanıcı Bulundu !"; }else{ resultText = "Sisteme Kayıtlı Kullanıcı Bulunamadı !"; } } catch(Exception e){ e.printStackTrace(); } return null; } // Arka plan işlemleri bittikten sonra yapılacaklar.. @Override protected void onPostExecute(Void aVoid) { // ProgressDialog kapatılıyor. progressDialog.dismiss(); // AlertDialog'u gösteriyoruz. alert = builder.setMessage(resultText) .setTitle("Sonuç") .setCancelable(true) .setPositiveButton("Tamam", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { } }).create(); alert.show(); } } } |
Böylelikle Ksoap2 kütüphanesi ile Web Servis işlemlerini nasıl yapabileceğimizi görmüş olduk. Kodlar arasında gerekli açıklamaları yaptım daha iyi anlayabilmek için projenin kaynak kodlarını indirerek alıştırma yapabilirsiniz.
Projenin kaynak kodlarını buraya tıklayarak indirebilirsiniz.
2 cevap
Çok yararlı ve anlatıcı olmuş emeğinize sağlık.
wcf gibi kanser bir servisle android’i bağlamam gerekti,bu saçmalığı 7 saat aradıktan sonra burada buldum,ayrıca progressdialog kullanmak güzel bir fikirmiş,teşekkürler.