Retrofit2 + Kotlin

Зависимости

Прописываем зависимости в build.gradle, в секцию dependencies

// retrofit
implementation 'com.squareup.retrofit2:retrofit:2.6.1'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.6.1'
implementation 'com.squareup.retrofit2:converter-gson:2.6.1'

// rxandroid
implementation "io.reactivex.rxjava2:rxandroid:2.0.1"

Модели

Данные для примера приходят из API в формате

{
"content": [
{
"id": 3,
"application_id": 1,
"title": "Aricle title",
"description": "Article description",
"content": "Article content"
}
]
}

Эти данные надо спроецировать в модель:

object Articles {

data class Result(val content: ArrayList<Article>)

data class Article(
val id: Int,
val application_id: Int,
val title: String,
val description: String,
val content: String
)
}

Теперь создаем сервис получения данных:

import retrofit2.http.GET
import retrofit2.converter.gson.GsonConverterFactory
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory
import retrofit2.Retrofit

import io.reactivex.Observable
import retrofit2.http.Headers

public interface ArticlesService {

@GET("api/content")
fun getList() : Observable<Articles.Result>

companion object {
fun create(): ArticlesService {

val retrofit = Retrofit.Builder()
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.baseUrl("http://api.example.com/")
.build()

return retrofit.create(ArticlesService::class.java)
}
}
}

Получаем данные

Теперь можно получать данные, например:

ArticlesService
.create()
.getList()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { result -> setupRecyclerView(result.content) }

Создаем сервис, создаем подписчик на события сервиса, подписываемся на события. В качестве примера, полученные данные передаются в функцию setupRecyclerView для дальнейшей обработки.