3 Temmuz 2020 Cuma

Kotlin-6 (Android Kotlin ApiCall - Kotlin ile API çağrısı)

Merhaba,

bu yazımda Kotlin ilen Android uygulamasında bir API isteğinin(request) nasıl yapılacağını paylaşacağım. Bu uygulama geliştirilirken HTTP istekleri OkHttpClient ile gerçekleştirilmiştir.  Örnek veriler için  jsonplaceholder("https://jsonplaceholder.typicode.com/photos") adresindeki API(endpoint) kullanılmıştır.  Gson(google) kütüphanesiyle de API den dönen JSON string veri Kotlin Objelerine dönüştürülmüştür.

 

Aşağıdaki adımları takip ederek API request'inin nasıl yapıldığını inceleyebilirsiniz.

 

ilk olarak Android Studio ile bir Kotlin projesi oluşturun.

Oluşturduğunuz uygulamada app/build.gradle  dosyasını açarak OkHttpClient kütüphanesini ekleyin.  Bu sayede gradle belirttiğiniz versiyondaki OkHttpClient kütüphanesini indirip projeye ekleyecektir.

ikinci olarak yine aynı amaçla ve aynı  şekilde Gson kütüphanesini build.gradle dosyasına ekleyin.

 

AndroidManifest.xml dosyasına aşağıdaki satırı ekleyerek uygulamanın internete çıkmasına izin verin.



<uses-permission android:name="android.permission.INTERNET" />

 

 

API den dönen response verisini Kotlin nesnesine dönüştürmede kullanmak için Photo.kt adında bir kotlin class'ı oluşturun.

Photo.kt dosyasının içeriği aşağıdaki gibi olmalıdır.



class Photo {

var albumId: Int? = null
var id: Int? = null
var title: String? = null
var url: String? = null
var thumbnailUrl: String? = null

constructor(albumId: Int?, id: Int?, title: String?, url: String?, thumbnailUrl: String?) {
this.albumId = albumId
this.id = id
this.title = title
this.url = url
this.thumbnailUrl = thumbnailUrl
}

override fun toString(): String {
return "Photo(albumId=$albumId, id=$id, title=$title, url=$url, thumbnailUrl=$thumbnailUrl)"
}
}

 

  

Son olarak MainActivity.kt'ye gelerek run adında URL parametresi alan  bir kotlin methodu oluşturun. Bu method içinde OkHttpClient.newCall'ın success ve failure methodları override edilmiştir. Success methodunda API den dönen beri GSON ile Photo nesnesine dönüştürülmüştür. Son adımda ise run methodu onCreate methodu içinde çağrılarak API çağrısı gerçekleştirilmiştir.

 

MainActivity.kt dosyasının son hali aşağıdaki gibi oluşacaktır.



class MainActivity : AppCompatActivity() {
private val client = OkHttpClient()

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

run("https://jsonplaceholder.typicode.com/albums/1/photos")
}

fun run(url: String) {
val request = Request.Builder()
.url(url)
.build()

client.newCall(request).enqueue(object : Callback {
override fun onFailure(call: Call, e: IOException) {
println("Error! e : ${e.message} ")
}

override fun onResponse(call: Call, response: Response) {
println("Success...")
val responseStr = response.body?.string()
val photos: List<Photo> =
Gson().fromJson(responseStr, Array<Photo>::class.java).toList()

println("photo : $photos")
}
})
}
}


 

 NOT: Uygulamayı başlattıktan sonra manifest dosyasında değişiklik yaparsanız buradaki değişiklikleriniz uygulamaya yansımayacaktır. Dolayısıyla internet erişimi için verdiğiniz izin uygulama tarafına yansımayıp aşağıdaki gibi bir error mesajı oluşacaktır. Bunu durumun çözümü için uygulamayı kaldırarak yeniden Android Studio üzerinden başlatmanız gerekir.

I/System.out: Error! e:socket failed: EPERM (Operation not permitted)


Uygulamanın kaynak kodlarına aşağıdaki adresten ulaşabilirsiniz.

github : https://github.com/lvntyldz/tutorials/tree/master/kotlin-android-app-examples/06-api-call


 

Hiç yorum yok:

Yorum Gönderme