Sendo assim, crie o arquivo StarWarsApiDef.kt e deixe-o como a seguir:package br.com.nglauber.starwarsrx.model.apiimport retrofit2.http.GETimport retrofit2.http.Pathimport rx.Observableinterface StarWarsApiDef { @GET("films") fun listMovies() : Observable<FilmResult> @GET("people/{personId}") fun loadPerson(@Path("personId") personId : String) : Observable<Person> }Os metodos seguem o que esta especificado na API do Star Wars. Para obtermos a lista de filmes, realizamos uma requisicao do tipo GET, para o endpoint "films" que retorna um objeto (FilmResult) que possui uma lista de filmes (Film). E para obter um personagem especifico, utilizamos o endpoint "people/id_do_personagem".Percebam que estamos retornando um Observable<FilmResult> e um Observable<Person>. A classe Observable e um dos principais componentes do RXJava (senao o principal). Se voce nao esta familiarizado com esses conceitos, sugiro assistir as palestras do Ubiratan Soares que e uma verdadeira aula sobre o assunto (veja os links no final do post).Definida a classe com os endpoints, vamos criar a implementacao que utilizara esses endpoints. Crie o arquivo StarWarsApi.kt e deixe-o como a seguir.package br.com.nglauber.starwarsrx.model.apiimport br.com.nglauber.starwarsrx.model.Characterimport br.com.nglauber.starwarsrx.model.Movieimport com.google.gson.GsonBuilderimport okhttp3.OkHttpClientimport okhttp3.logging.HttpLoggingInterceptorimport retrofit2.Retrofitimport retrofit2.adapter.rxjava.RxJavaCallAdapterFactoryimport retrofit2.converter.gson.GsonConverterFactoryimport rx.Observableimport java.util.*class StarWarsApi { val service: StarWarsApiDef init { val logging = HttpLoggingInterceptor() logging.level = HttpLoggingInterceptor.Level.BODY val httpClient = OkHttpClient.Builder() httpClient.addInterceptor(logging) val gson = GsonBuilder().setLenient().create() val retrofit = Retrofit.Builder() .baseUrl("http://swapi.co/api/") .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create(gson)) .client(httpClient.build()) .build() service = retrofit.create<StarWarsApiDef>(StarWarsApiDef::class.java) } fun loadMovies(): Observable<Movie>? { return service.listMovies() .flatMap { filmResults -> Observable.from(filmResults.results) } .map { film -> Movie(film.title, film.episodeId, ArrayList<Character>()) } }}Essa classe possui um atributo chamado service do tipo StarWarsApiDef (que criamos anteriormente). Dentro do bloco init{} fazemos a inicializacao e configuracao do servico do Retrofit. Adicionamos o HttpLoggingInterceptor ao OkHttpClient para podermos visualizar no Logcat as requisicoes e as respostas feitas pelo retrofit. Instanciamos o GsonBuilder para que o JSON retornado seja tratado pela biblioteca Gson. Utilizamos o RxJavaCallAdapterFactory para o Retrofit retornar o resultado em forma de objetos observaveis. Por fim, utilizamos o Retrofit.Builder para criar a instancia do servico.O operador flatMap permite iterar sobre um Observable e retornar um novo Observable. E isso que estamos fazendo no metodo loadMovies. Estamos chamando o metodo listMovies() do nosso servico que retorna um Observable de FilmResult, entao utilizamos o operador flatMap para obter o FilmResult e geramos um novo Observable de Film com os filmes por meio do metodo Observable.from(). Em seguida, iterarmos por cada filme (Film) da lista (que e um Observable de Film) e o transformamos em um Observable de Movie, que e o tipo de retorno do metodo.Chamando o servico na ActivityVamos ver como acessar o nosso servico na interface grafica. Se voce ainda nao converteu sua activity para Kotlin, faca isso acessando o menu "Code > Convert Java File to Kotlin file". E deixe sua activity como a seguir.class MainActivity : AppCompatActivity() { lateinit var listView : ListView lateinit var movieAdapter : ArrayAdapter<String> var movies = mutableListOf<String>() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) listView = ListView(this) setContentView(listView) movieAdapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, movies) listView.adapter = movieAdapter val api = StarWarsApi() api.loadMovies() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe ({ movie -> movies.add("${movie.title} -- ${movie.episodeId}") }, { e -> e.printStackTrace() },{ movieAdapter.notifyDataSetChanged() }) }}Perceba que estamos invocando o metodo loadMovies() da nossa API. Como vimos anteriormente, esse metodo retorna um Observable, ou seja, um