Android Tests – Cannot invoke observeForever on a background thread

Ao realizar um teste utilizando coroutine me deparei com esse problema ao tentar observar um LiveData Cannot invoke observeForever on a background thread Para contextualizar o problema, eu estava utilizando um dao do Room com uma suspend function para me retornar um LiveData, exemplo: O problema é a execução do observer fora da thread da […]

Java – Como definir o TimeZone da aplicação (How to set a JVM TimeZone Properly)

Esse ano foi determinado que o estado de São Paulo não haveria mais horário de verão, isso implicou em alguns problemas no setor de TI, muitos dispositivos mudaram automaticamente e a própria JVM deu alguns problemas, ao criarmos um new Date() por exemplo, o horário de verão estava presente. Isso aconteceu comigo em uma determinada […]

Gson – Criando um Adapter para conversão de data ISO em Date (ISO formatted date from JSON String using Gson)

O código abaixo representa uma configuração do Gson para realizar a conversão de um Json com campos de data em formato ISO para o objeto Date

Android – Como combinar dois ou mais LiveData ( Transformations.map with multiple arguments )

Nesse post vou mostrar como realizar a combinação de LiveData para gerar outro. No meu caso utilizei dessa combinação para deixar a exibição de um botão de Login dinâmico em relação ao preenchimento das colunas de usuário e senha. Com a utilização do Transformations.map podemos criar um novo LiveData que muda de valor conforme o […]

Android – Como remover o fragment da pilha ao navegar (How to clear navigation Stack after navigating to another fragment)

Nesse post vou mostrar como remover da pilha o fragment anterior utilizando a nova arquitetura de navegação do android ( Navigation Architecture Component ) Dado a seguinte navegação A -> B -> C ao adicionarmos o código a seguir a action de navegação do B para o C a stack de volta ficaria assim: C -> A […]

Android – Adicionando onBackPressed com dois clicks no Fragment (Clicking the back button twice to exit)

Quando estamos em um fragment não temos acesso ao override do onBackPressed, nesse caso temos que acessar a FragmentActivity e adicionar um Callback no onBackPressedDispatcher, dessa maneira começamos a interceptar o click. Na solução abaixo criamos um callback que permite a ação voltar diretamente do Fragment após ele ter realizado o click em um intervalo […]

Spring Boot – Caching

Em qualquer sistema o Cache é algo muito importante e muito utilizado, ao adicionar um sistema de cache em nossos sistemas, garantimos uma melhor performance evitando vários processamentos desnecessários, o Spring Boot fornece uma ferramenta incrível deixando a configuração e uso muito simples, usando apenas anotations. O exemplo a seguir irei seguir os passos da […]

Gradle / jUnit5 – Como criar tasks para executar testes com tags específicas ( JUnit5 tag-specific gradle task )

Em muitos projetos temos a necessidade de criar testes de integração, porém eles podem ser mais lentos, e não gostamos de executa-los sempre, para isso a ferramenta jUnit fornece as @Tag para que possamos filtrar a execução deles. A seguir vou inserir um gist mostrando como configurar uma task no Gradle para a execução de […]

Java / Web Service – Adicionando autenticação Basic no header do JAX-WS (Java Web Service client basic authentication)

Nesse post vou mostrar como adicionar uma autenticação no consumo de um Web Service utilizando as bibliotecas do jax-ws. Muitas implementações de Web Service utilizando Soap é necessário a implementação de autenticação, normalmente essa autenticação é adicionada no Header do pacote, porém o jax-ws quando é gerado normalmente não te da essa implementação, não te […]

Gradle / Tomcat – Plugin para deploy com o Gradle (Deployment to Tomcat with Gradle)

Normalmente para realizar o deploy de uma aplicação no Tomcat, temos que entrar em seu painel e realizar o upload manualmente do arquivo .war, esse processo é um pouco custoso e nem sempre temos acesso a esse painel em um ambiente de produção; Em busca de encontrar uma solução para automatizar esse procedimento com o […]

Rolar para o topo