KEMBAR78
Introdução ao Desenvolvimento Android com Kotlin | PDF
INTRODUÇÃO AO DESENVOLVIMENTO
ANDROID COM KOTLIN
Nelson Glauber
@nglauber

www.nglauber.com.br

youtube.com/nglauber
O QUE VEREMOS AQUI HOJE?
▸ Criar uma aplicação Android utilizando a linguagem Kotlin
que acessa um Web Service REST.
▸ Criar o projeto, criar os layouts, entender a estrutura de
um projeto, conhecer um pouco da linguagem Kotlin,
conhecer os conceitos básicos do Android (Activity,
Fragment, Adapter, …), etc.
CONFIGURAÇÃO DO AMBIENTE
▸ Android Studio 3.3 (https://developer.android.com/studio)
▸ PC com Windows ou Linux, ou Mac
▸ Pelo menos 8GB de RAM (16 recomendado)
▸ Para testar a aplicação
▸ Aparelho Android com opção do desenvolvedor
habilitada e driver USB (ADB Driver)
▸ Emulador (Nativo, Genymotion ou outro)
CRIANDO UM PROJETO
▸ Assistente de criação do
projeto
▸ Estrutura do projeto
▸ Executando a aplicação no
emulador
O APLICATIVO DE EXEMPLO
HTTPS://WWW.YOUTUBE.COM/WATCH?V=YSZ-K4SBUIE
CONSTRAINTLAYOUT
GOOGLE BOOKS API
▸ REST API

https://developers.google.com/books/docs/v1/
getting_started
▸ Criar projeto no Google Developers Console

https://console.developers.google.com/
▸ Habilitar API
▸ Gerar chave

keytool -list -v -keystore ~/.android/debug.keystore -
alias androiddebugkey -storepass android -keypass android
GOOGLE BOOKS API
private val API_KEY = "..."
private val BOOK_JSON_URL =
"https://www.googleapis.com/books/v1/volumes?q=%s&key$API_KEY"
DATA CLASSES
▸ SearchResult
▸ Volume
▸ VolumeInfo
▸ ImageLinks
OKHTTP + GSON
▸ OkHttp (https://github.com/square/okhttp)
▸ Gson (https://github.com/google/gson)
implementation "com.squareup.okhttp3:okhttp:3.14.0"
implementation "com.google.code.gson:gson:2.8.5"
fun searchBook(q: String): SearchResult? {
val client = OkHttpClient.Builder()
.readTimeout(5, TimeUnit.SECONDS)
.connectTimeout(10, TimeUnit.SECONDS)
.build()
val request = Request.Builder()
.url(String.format(BOOK_JSON_URL, q))
.build()
try {
val response = client.newCall(request).execute()
val json = response.body()?.string()
val result = Gson().fromJson<SearchResult>(
json, SearchResult::class.java)
return result
} catch (e: Exception) {
e.printStackTrace()
}
return null
}
ANDROIDMANIFEST.XML
<manifest ...>
<uses-permission
android:name="android.permission.INTERNET"/>
<uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE"/>
<application
...
android:networkSecurityConfig="@xml/network_config"
android:usesCleartextTraffic="true">
NETWORK SECURITY CONFIG
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">books.google.com</domain>
</domain-config>
</network-security-config>
CRIANDO A UI
▸ Tela de listagem
▸ Adapter
▸ Item da lista
▸ Tela de detalhes
ADAPTERS
▸ ListView + BaseAdapter (ou ArrayAdapter)
▸ RecyclerView + RecyclerView.Adapter
▸ ViewHolder
REAPROVEITANDO VIEWS DO ADAPTER
BRUNO
ANA
CARLOS
DANIELA
ELIANE
FERNANDA
ANA
Scrolling…
Recycled View
COROUTINES
▸ Lightweight threads.
▸ Permite realizar tarefas em background e atualizar a Main
Thread.
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.1'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.1.1'
COROUTINES
class BooksListFragment : Fragment(), CoroutineScope {
...
private lateinit var job: Job
private var downloadJob: Job? = null
override val coroutineContext: CoroutineContext
get() = Dispatchers.Main + job
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
...
job = Job()
}
override fun onDestroy() {
super.onDestroy()
job.cancel()
}
}
COROUTINES
private fun search() {
downloadJob = launch {
showProgress(true)
val searchResult = withContext(Dispatchers.IO) {
BookHttp.searchBook()
}
updateBookList(searchResult?.items)
showProgress(false)
}
}
CARREGAMENTO DE IMAGEM EM BACKGROUND
▸ Picasso
▸ Fresco
▸ Glide
implementation 'com.github.bumptech.glide:glide:4.8.0'
kapt 'com.github.bumptech.glide:compiler:4.8.0'
TELA DE DETALHES
▸ Passando objeto como parâmetro (Parcelable, Serializable,
Parcelize, Parcel, …)
▸ Exibindo objeto na tela
▸ Abrindo detalhes do livro no browser
@NGLAUBER
WWW.NGLAUBER.COM.BR

OBRIGADO!
YOUTUBE.COM/NGLAUBER

Introdução ao Desenvolvimento Android com Kotlin