KOTLIN Interface’den Nesne Oluşturmak

Merhaba,
Bu yazımda sizlere Kotlin de bir interface’de belirlenen metoda erişim için gerekli olan object oluşturma işleminden bahsedeceğim. Birçok yazılım dilinde alışık olduğumuz bir syntax vardı. Eğer bir interface’e ve içerisindeki metoda ulaşmak istiyorsak öncelikle bu interface’i implement ediyor ve override ederek metodu kullanıyorduk. Yine override ederek kullancağız fakat Kotlin burada hem syntax olarak hem de okunma ve kullanım olarak çok güzel bir yöntem sunuyor bize.

Interface | IMusteriListesiCallBack : Müşteri listesini çeken bir web servisimiz olsun. Bu işlem tamamlandığında listemize verileri getirecek olan Interface metodu bu interface’den override edilecek.

interface IMusteriListesiCallBack {
   fun responseListe(durum:Boolean, musteriListesi:ArrayList<String>, strMesaj:String) 
}

MainActivity.kt : MainActivity içerisinde bu interfaceden bir nesne oluşturalım ve içerisindeki metodu override edelim. 

class MainActivity : AppCompatActivity(){
   
   override fun onCreate(savedInstanceState: Bundle?){
      super.onCreate(savedInstanceState)
      setContentView(R.layout.activity_main)

      musteriListesi()      
   }

   private fun musteriListesi(){
      
      //öncelikle call back metoduna erişmek için nesnemizi oluşturduk.
      val mListeCallBack = object: IMusteriListesiCallBack{
         
         override fun responseListe(durum:Boolean, musteriListesi:ArrayList<String>, strMesaj:String){
             //gelen verileri burada kullanabiliriz.
         }
      }
//      Bu işlemlere cevap oluşturacak Webservis metodumuzu çalıştıralım ve işlem tamamlandığında buraya bir          //      cevap döndürmesini bekleyelim.
      WebServis.wsMusteriListesi(baseContext, mListeCallBack)

   }


}

WebServis.kt içerisinde örnek bir wsMusteriListesi metodu..

fun wsMusteriListesi(context: Context,  callBack: IMusteriListesiCallBack) {
            val musteriler: ArrayList<String> = java.util.ArrayList()
            var _URL = "http://......."
            val jsonRequest = object : StringRequest(Request.Method.POST,
                    _URL,
                    Response.Listener<String> { s ->
                        try {
                            val obj = JSONObject(s)
                            if (obj.getBoolean("sonuc")) {
                                val array = obj.getJSONArray("veri")

                                for (i in 0..array.length() - 1) {
                                    val objectArtist = array.getJSONObject(i)
                                    musteriler.add(objectArtist.getString("musteriadi"))
                                }
                                callBack.responseListe(obj.getBoolean("sonuc"),musteriler, obj.getString("mesaj"))
                            } else {
                                callBack.responseListe(obj.getBoolean("sonuc"),musteriler, obj.getString("mesaj"))
                            }
                        } catch (e:JSONException) {
                            e.printStackTrace()
                        }
                    }, Response.ErrorListener { volleyError -> Toast.makeText(context, volleyError.message, Toast.LENGTH_LONG).show() })
            {
                override fun getParams(): Map<String, String> {}
            }

            val requestQueue = Volley.newRequestQueue(context)
            requestQueue.add<String>(jsonRequest)
        }

Bu işlemler sonucunda Interface’den türettiğimiz object bize işlem bittiğinde bir call back oluşturmuş oldu. Örneğin veri çektik ve işlem tamamlandığında verileri RcyclerView’e gönderebiliriz.

Aynı zamanda bir sınıf içerisinde birden fazla object oluşturarak faklı işlemler için tek Interface’i kullanabiliriz. Bu sayede daha az kod daha çok iş yapabiliriz. Soru ve görüşleriniz için ogzhnozdmr@gmail.com

Yorum Ekle

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir