Utils para ler JSON de mocks e transformá-los em objetos em Kotlin | through Letícia Gonçalves | Dec, 2023

https://developer.android.com/static/codelabs/basic-android-kotlin-compose-first-program/img/3bbebda874e6003b.png?hl=pt-br

Muitas vezes durante o desenvolvimento de front-end nos deparamos com formulários e campos de enter. Com o aprimoramento sistema e aplicando regras de negócio, ocorre que os campos começam a ser validados. Num cenário de muitos inputs, ficar preenchendo a cada subida no ambiente native acaba ficando muito demorado e cansativo.

Nesse artigo vou ensinar como criar objetos a partir de um JSON, e você pode well-liked seus inputs com os atributos do objeto, por exemplo. Estarei demonstrando com uma aplicação cellular (Android), utilizando Kotlin.

Pré-requisitos:

  1. Adicionar a lib Gson ao seu projeto, você pode escolher a versão que preferir e adicionar às dependências (https://mvnrepository.com/artifact/com.google.code.gson/gson)

Deixarei o hyperlink do repositório com essa implementação ao ultimate desse artigo.

Passo a passo:

  1. Vamos adicionar nosso JSON no projeto. Para isso, european escolhi o diretório app/src/property/mocks, mas você pode escolher o native que preferir.
  2. Adicione um report com o tipo sendo .json
  3. Agora vamos criar nossa classe util, european adicionei a minha dentro do diretório do projeto no package deal shared/utils, e dei o nome dela de MockUtils.
  4. Agora vou deixar a implementação das funções da classe e irei explicar. No próximo passo irei mostrar como utilizá-las.
import android.content material.Context
import com.google.gson.Gson
import java.io.IOException
import java.io.InputStream
import java.lang.mirror.Sort

magnificence MockUtils(non-public val context: Context) {

amusing <T> getMockFromAsset(fileName: String, sort: Elegance<T>): T? {
val json: String? = loadJsonFromAsset("mocks/$fileName")
go back if (json != null) {
Gson().fromJson(json, sort)
} else {
null
}
}

non-public amusing loadJsonFromAsset(fileName: String): String? {
go back take a look at {
val inputStream: InputStream = context.property.open(fileName)
inputStream.bufferedReader().use { it.readText() }
} catch (e: IOException) {
e.printStackTrace()
null
}
}
}

Primeiramente, a classe requer um parâmetro non-public val context: Context, que é basicamente o contexto da aplicação, que é uma referência ao estado atual da aplicação e fornece acesso a recursos e serviços específicos do aplicativo.

Agora sobre as funções:

A função loadJsonFromAsset(fileName: String) recebe como parâmetro o nome do arquivo à ser lido e seu retorno é uma String.
Ela é responsável por recuperar o conteúdo do JSON que está dentro do diretório property (context.property.open(fileName)). Após isso é feita a leitura do conteúdo do arquivo, em forma de String (inputStream.bufferedReader().use { it.readText() }). Caso dê algum erro na leitura, é retornado null. Se tudo der certo, é retornada uma String com o conteúdo do JSON.

Já a função getMockFromAsset(fileName: String, sort: Elegance<T>) recebe dois parâmetros: o fileName é o nome do arquivo JSON que queremos ler; o sort é o tipo do retorno que queremos receber. Esse tipo de retorno é chamado de genérico (https://kotlinlang.org/doctors/generics.html).
Agora sobre o funcionamento dela, primeiro é chamada a função para recuperar o conteúdo do JSON (loadJsonFromAsset(“mocks/$fileName”)). Como colocamos os mocks dentro do diretório /property/mocks, é concatenado antes do nome do arquivo a pasta /mocks.
Tendo a String com o conteúdo do arquivo, entramos com o uso da biblioteca do Gson. Usaremos ela para converter um JSON no objeto do tipo que foi passado (Gson().fromJson(json, sort)). Se ocorrer qualquer problema para “parsear” o JSON no objeto, o retorno será null.

E claro, essa implementação foi feita para meu contexto. É possível adaptá-la de acordo com a sua necessidade.

Vamos agora para o uso dessa classe utils. No meu caso, european utilizei ele na implementação da minha job:

import androidx.appcompat.app.AppCompatActivity
import com.instance.havagas.area.fashions.Shape
import com.instance.havagas.shared.utils.MockUtils

magnificence MainActivity : AppCompatActivity() {
val mockUtils = MockUtils(this)

amusing createMockForm(): Shape? {
go back mockUtils.getMockFromAsset("form-mocks.json", Shape::magnificence.java)
}
}

Para inicializar um objeto do MockUtils é necessário passar o contexto, então basta passar o this, que indica que é passada a instância da MainActivity. Após isso, é só chamar o método getMockFromAsset, passando o nome do arquivo .json e o tipo da classe que deve ser retornada.

Pronto, agora já é possível utilizar o objeto criado a partir do JSON. ✨

O repositório do projeto completo está aqui.

You May Also Like

More From Author

+ There are no comments

Add yours