Rede Android em 2019 – Retrofit com Coroutines de Kotlin

Navendra Jha Blocked Unblock Seguir Seguindo 13 de janeiro

O ano de 2018 viu muitas grandes mudanças no Android World, especialmente em termos de redes Android. O lançamento de uma versão estável do Kotlin Coroutines impulsionou uma grande movimentação do RxJava para o Kotlin Coroutines para lidar com multithreading no Android.
Neste artigo, falaremos sobre as chamadas da API de rede no Android usando o Retrofit2 e o Kotlin Coroutines . Faremos uma chamada de rede para a API do TMDB para buscar filmes populares.

Eu conheço todos esses conceitos, mostre-me o código !!

Se você tiver experiência com Redes Android e tiver feito chamadas de rede antes de usar Retrofit, mas provavelmente com outras bibliotecas, como RxJava, em vez de Kotlin Coroutines e só quiser verificar a implementação, confira este código readme no Github.

Redes Android em poucas palavras

Em suma, a rede android ou qualquer rede funciona da seguinte maneira:

  • Solicitação— Faça uma solicitação HTTP para uma URL (chamada de terminal) com os cabeçalhos adequados, geralmente com a Chave de autorização, se necessário.
  • Resposta – A solicitação retornará uma resposta que pode ser um erro ou um sucesso. Em caso de sucesso, a resposta conterá o conteúdo do nó de extremidade (geralmente eles estão no formato JSON)
  • Analisar e armazenar – Vamos analisar esse JSON e obter os valores necessários e armazená-los em nossa classe de dados.

No Android, usamos –

  • Okhttp – Para criar uma solicitação HTTP com todos os cabeçalhos adequados.
  • Retrofit – Para fazer o pedido
  • Moshi / GSON – para analisar os dados JSON
  • Kotlin Coroutines – Para fazer solicitações de rede sem bloqueio (thread principal).
  • Picasso / Glide – Para baixar uma imagem da internet e configurá-la em um ImageView.

Obviamente, estas são apenas algumas das bibliotecas populares, mas existem outras também. Além disso, a maioria dessas bibliotecas é desenvolvida por pessoas incríveis na Square Inc. Confira este projeto de código aberto pela equipe Square .

Vamos começar

A API do Banco de Dados de Filmes (TMDb) contém uma lista de todos os filmes e programas de TV populares, futuros, mais recentes e que estão sendo exibidos agora. Esta é uma das API mais populares para se brincar também.

A API do TMDB requer uma chave de API para fazer solicitações. Por isso:-

Ocultar a chave da API no controle de versão (opcional, mas recomendado)

Depois de ter a chave da API, siga as etapas abaixo para ocultá-la no VCS.

  • Adicione sua chave em local.properties presentes na pasta raiz.
  • Obtenha acesso à chave no build.gradle programaticamente.
  • Então a chave está disponível para você no programa através do BuildConfig .

Configurando o Projeto

Para configurar o projeto, primeiro adicionaremos todas as dependências necessárias em build.gradle (Module: app): –

Agora vamos criar nosso serviço TmdbAPI

Vamos ver o que estamos fazendo aqui no ApiFactory.kt.

  • Primeiro, estamos criando um Network Interceptor para adicionar api_key em toda a requisição como authInterceptor.
  • Então estamos criando um cliente de rede usando o OkHttp e adicionamos o nosso authInterceptor.
  • Em seguida, juntamos tudo para criar nosso criador e manipulador de solicitação de HTML usando Retrofit. Aqui, adicionamos nosso cliente de rede criado anteriormente, o URL base e adicionamos um conversor e uma fábrica de adaptadores.
    O primeiro é o MoshiConverter, que ajuda na análise JSON e converte JSON de resposta em classe de dados Kotlin com análise seletiva, se necessário.
    A segunda é CoroutineCallAdaptor que é aRetrofit2 CallAdapter.Factory para coroutine de Kotlin Deferred .
  • Finalmente, simplesmente criamos nosso tmdbApi passando uma referência da classe TmdbApi (criada na próxima seção) para a classe de retrofit criada anteriormente.

Explorando a API do Tmdb

Obtemos a seguinte resposta para / movie / endpoint popular . A resposta retorna resultados, que é a matriz do objeto de filme. Este é um ponto de interesse para nós.

Então agora vamos criar nossa classe de dados Movie e MovieResponse conforme o json.

Interface TmdbApi
Depois de criar classes de dados, criamos a interface TmdbApi cuja referência nós adicionamos no construtor retrofit na seção anterior. Nesta interface, adicionamos todas as chamadas de API necessárias a qualquer parâmetro de consulta, se necessário. Por exemplo, para obter um filme por id, adicionaremos o seguinte método à nossa interface:

 interface TmdbApi { 
 @GET ("filme / popular") 
fun getPopularMovies (): Adiada <Response <TmdbMovieResponse >>
 @ GET ("filme / {id}") 
divertido getMovieById (@Path ("id") id: Int): Adiado <Response <Movie >>
 } 

Finalmente, fazendo uma chamada de rede
Em seguida, finalmente fazemos uma chamada de rede para obter os dados necessários, podemos fazer essa chamada em DataRepository ou em ViewModel ou diretamente em Activity também.

 val movieService = ApiFactory.tmdbApiGlobalScope 
.launch (Dispatchers.Main)
{
val popularMovieRequest = movieService.getPopularMovie ()
experimentar {
resposta val = popularMovieRequest.await ()
if (response.isSuccessful) {
val movieResponse = response.body ()
// Este é o único objeto Tmdb Movie response
val popularMovies = movieResponse? .results
}outro{
Log.d ("FetchMovie", response.errorBody (). ToString ())
}
} catch (e: Exceção) {

}
}

Este é um nível básico introdutório, mas chamadas API completas de nível de produção no Android. Para mais exemplos, visite aqui.

Codificação Feliz!