
Diyelim ki bir API?mız var ve bizim bu API?daki verileri almamız gerekiyor. Bu örnek için https://ctftime.org/api/v1/events/?l...ish=1611011426 'yi kullanacağız.
Şimdi Android Studio?da yeni bir proje oluşturalım.


MVVM yapısını kullanmak ve en iyi şekilde yararlanmak için bir tane fragment oluşturalım


Daha sonra oluşturduğumuz Fragmentı MainActivity?e ekliyoruz. Şimdi verileri çekerken kullanacağımız Retrofit ve RxJava?yı import edelim. build.gradle dosyamız bu şekilde olmalı.
Kod:
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 29
buildToolsVersion "30.0.2"
defaultConfig {
applicationId "com.ego1st.apideneme"
minSdkVersion 23
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
}
def retrofitVersion = '2.9.0'
def rxJavaVersion = '2.1.1'
dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'androidx.core:core-ktx:1.3.1'
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.2'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
implementation "com.squareup.retrofit2:retrofit:$retrofitVers ion"
implementation "com.squareup.retrofit2:converter-gson:$retrofitVersion"
implementation "com.squareup.retrofit2:adapter-rxjava2:$retrofitVersion"
implementation "io.reactivex.rxjava2:rxjava:$rxJavaVersion"
implementation "io.reactivex.rxjava2:rxandroid:$rxJavaVersion "
}

Şimdi kodlarımızı yazmaya başlayabiliriz, ilk olarak Modelimizi yazalım. CTFModel adlı bir sınıf oluşturalım ve bu sınıfı aşağıda da görüldüğü gibi bir data class'a çevirelim.
Kod:
package com.ego1st.apideneme
data class CTFModel (
val url: String?,
val hours: String?,
val days: String?,
val start: String?,
val finish: String?,
val title: String?,
val description: String?,
val name: String?
)

Gördüğünüz gibi API'de bizle paylaşılan propertylerin isimlerini aynen girerek onları belirtiyoruz.
Şimdi API bağlantısı için bir Interface oluşturalım, ismine CTFApi diyorum.

Kod:
package com.ego1st.apideneme
import io.reactivex.Single
import retrofit2.http.GET
interface CTFApi {
//https://ctftime.org/api/v1/events/?limit=50&start=1600470626&finish=1611011426
@Get("events/?limit=50&start=1600470626&finish=1611011426")
fun getCtfEvents(): Single
}
Gördüğünüz gibi API urlmizin BASE dediğimiz baş kısmını yazmadık, şimdi oluşturacağımız CTFService'de de orayı halledeceğiz. CTFService isimli bir sınıf oluşturalım

Kod:
package com.ego1st.apideneme
import io.reactivex.Single
import retrofit2.Retrofit
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactor y
import retrofit2.converter.gson.GsonConverterFactory
class CTFService {
private val BASE_URL = "https://ctftime.org/api/v1/"
private val api = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create() )
.addCallAdapterFactory(RxJava2CallAdapterFactory.c reate())
.build()
.create(CTFApi::class.java)
fun getCtfEventData() : Single {
return api.getCtfEvents()
}
}
Gördüğünüz gibi burda Retrofit Builder ile CallAdapter ve Converterımızı belirtiyoruz.

Şimdi RecyclerView ile verilerimizin sıralı bir şekilde gelmesini sağlayalım. Recycleri View'ı oluşturalım;

Daha sonra alacağımız veriler için şu layoutu kullanalım;
<div style="margin:20px; margin-top:5px"> Kod: