Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

1 
 
1 
Programação Para Dispositivos Móveis em Android 
 
Sintaxe e Componentes do React Native 
Introdução 
• Expansão do mercado de aplicativos móveis devido à popularização dos 
smartphones. 
• Desafios para desenvolvedores diante de sistemas operacionais variados e 
conexão instável. 
• Necessidade de novas bibliotecas e ferramentas para programação mobile. 
• Apresentação do React Native, um framework JavaScript para 
desenvolvimento multiplataforma. 
Multiplataformas 
• Aplicativos que compartilham o mesmo código-fonte e funcionam em Android 
e iOS. 
Módulo 1: Definição do Ambiente de Desenvolvimento 
1. React.js: Biblioteca para desenvolvimento web. 
2. React Native: Voltado para mobile, possibilitando código híbrido. 
3. Ferramentas de Desenvolvimento: 
o Editores de código. 
o Emuladores e dispositivos móveis reais para testes. 
o Expo: Framework que facilita o desenvolvimento e testes, consumindo 
menos recursos. 
Gerenciadores de Pacotes 
1. NPM (Node Package Manager) 
o Gerenciador padrão do Node.js. 
o Componentes: site, CLI, repositório. 
o Utiliza o arquivo package.json para armazenar dependências e 
configurações. 
2. Yarn 
o Criado pelo Facebook e outras empresas para resolver problemas de 
segurança e eficiência no NPM. 
o Utiliza yarn.lock para garantir a exata versão das dependências em todas 
as instalações. 
o Ambos cumprem a mesma função, porém recomenda-se usar apenas um 
por projeto para evitar conflitos. 
 
Aqui está um resumo esquematizado do conteúdo: 
Node.js 
• Ambiente server-side para execução de códigos em JavaScript. 
 
2 
 
2 
Programação Para Dispositivos Móveis em Android 
 
• Permite criar aplicações back-end, como APIs, servidores e microsserviços. 
• Essencial para desenvolvimento com React Native, pois inclui o NPM. 
Instalação do Node.js 
1. Instaladores (Windows/Linux). 
2. NVM (Node Version Manager) – preferível por evitar erros de permissões. 
3. Testar instalação: 
o node -v (verificar versão do Node). 
o npm -v (verificar versão do NPM). 
Instalação do Expo 
1. Executar: npm install -g expo-cli 
2. Criar um projeto: 
o expo init nome_da_aplicacao 
o Escolher o template “blank”. 
3. Iniciar: npm start 
o Testar no navegador ou via Expo Client no smartphone. 
Utilização de emuladores 
• Android Studio: Ferramenta completa para testar aplicativos Android. 
• Opção alternativa: Uso de dispositivo real via USB. 
Instalação de Dependências para React Native CLI 
1. Node.js (já instalado). 
2. React Native CLI via NPX (npx react-native init nome_da_aplicacao). 
3. Java JDK e Android Studio (instalação via gerenciadores como Chocolatey ou 
nativos do Linux). 
Teste do ambiente 
1. Criar um projeto React Native via CLI: npx react-native init 
nome_da_aplicacao 
2. Executar aplicação em dispositivo virtual ou físico: npx react-native run-
android. 
IDE recomendada 
• VS Code, por ter muitos plug-ins específicos para React Native. 
 
 
Aqui está um resumo esquematizado sobre componentes em React Native: 
O que são componentes? 
 
3 
 
3 
Programação Para Dispositivos Móveis em Android 
 
• Pequenos pedaços de software que desempenham funções específicas. 
• Facilitam o desenvolvimento, evitando que tudo precise ser criado do zero. 
• Permitem composição, ou seja, a combinação de pequenos códigos para formar 
um software completo. 
• Aplicáveis ao front-end e back-end. 
JSX (JavaScript XML) 
• Sintaxe utilizada para escrever componentes React Native. 
• Similar ao XML, combina JavaScript e marcações de interface. 
• Elementos JSX podem ser: 
o Self-opening () 
o Self-closing () 
o Com atributos ( ou ) 
Funcionamento do React Native 
• Desenvolvimento híbrido: um código roda em Android e iOS. 
• Usa dois núcleos: 
o Nativo (Java/Kotlin para Android, Swift/Objective-C para iOS). 
o JavaScript (JavaScriptCore). 
• Transpilar: transforma código JavaScript em uma linguagem de alto nível. 
• Minificar: reduz tamanho do código para otimizar desempenho. 
Componentes nativos em React Native 
Esses componentes correspondem a elementos nativos de Android, iOS e HTML: 
React Native Android iOS HTML 
 ViewGroup UIView 
 TextView UITextView 
 ImageView UIImageView 
 EditText UITextField 
 ScrollView UIScrollView 
View 
• Principal componente de interface gráfica. 
• Responsável pela estrutura e organização do layout. 
• Pode ser aninhada com outras views. 
• Funciona de forma equivalente nos diferentes sistemas. 
Aqui está um resumo estruturado sobre os componentes do React Native: 
View 
• Principal componente de interface gráfica. 
 
4 
 
4 
Programação Para Dispositivos Móveis em Android 
 
• Pode conter atributos diversos e reagir a eventos. 
• Útil para organização do layout e aninhamento de outros elementos. 
Text 
• Exibe textos, permitindo aninhamento, estilização e interação via toque. 
• Evento onPress: possibilita alteração do texto ao ser tocado. 
• Recomendado o uso de StyleSheet para melhor organização do código. 
Image 
• Similar à tag HTML , exibe imagens locais ou externas. 
• Herdeiro de View, possui atributos próprios para manipulação de imagens. 
TextInput 
• Permite entrada de texto via teclado. 
• Funcionalidades como autocorreção, autocapitalização e diferentes tipos de teclado. 
• Eventos: 
o focus: quando o campo recebe foco. 
o blur: quando o campo perde foco. 
• Útil para validação e máscaras de entrada, como CPF e telefone. 
ScrollView 
• Contêiner para elementos roláveis na tela. 
• Necessário definir altura limitada para funcionamento correto. 
• Alternativa para grandes listas de conteúdo: FlatList (melhor desempenho). 
Outros componentes 
1. Button – Botões interativos. 
2. Switch – Alternador de estado (ativado/desativado). 
3. FlatList – Lista otimizada para grandes volumes de dados. 
 
O que é depuração? 
• Processo de identificação e correção de erros (bugs) no código-fonte. 
• Feito por observação do estado dos objetos, variáveis e fluxos do programa. 
• Pode ser iniciada de duas formas: 
o Indiretamente: erro gerado na execução do aplicativo. 
o Iniciativa do desenvolvedor: testes estruturados em diferentes cenários. 
Como depurar um software 
• Utilização de uma IDE ou console do navegador. 
• Analisar: 
o Estado de objetos. 
 
5 
 
5 
Programação Para Dispositivos Móveis em Android 
 
o Valores de variáveis. 
o Execução de condicionais e loops. 
Ferramentas de depuração 
1. Console do navegador: 
o Acessado via Inspecionar Elementos no navegador. 
o Útil para análise de logs (console.log) e chamadas de APIs. 
2. Metro (React Native Debugger): 
o Abrir janela do Metro e pressionar “d”. 
o Exibir opção Debug, abrindo ferramenta no navegador. 
o Console acessível via CTRL + SHIFT + J. 
3. React Developer Tools: 
o Ferramenta para inspecionar hierarquia de componentes, estilos e estados. 
o Instalação global via: npm install -g react-devtools. 
o Ativação com react-devtools + opção Show Inspector. 
4. In-App Developer Menu: 
o Acessível via CTRL + M (emulador) ou sacudir dispositivo físico. 
o Oferece ferramentas úteis como: 
▪ Fast Refresh (atualização rápida do código). 
▪ Sampling Profiler & Perf Monitor (monitoramento de desempenho). 
Depuração de código nativo 
• Restrito a códigos nativos (não disponível no Expo). 
• Acesso a logs detalhados via terminal: 
• npx react-native run-android 
• npx react-native log-android 
• adb logcat *:S ReactNative:V ReactNativeJS:V 
 
Organizando a depuração 
1. Comparar o resultado esperado com o obtido: 
o Identifique se cada funcionalidade do aplicativo está retornando o esperado. 
o Teste cada ação isoladamente antes de verificar o software como um todo. 
2. Analisar os erros obtidos: 
o Diferencie erros do código-fonte e erros externos (exemplo:API indisponível). 
o Utilize logs do console para diagnosticar problemas no JavaScript. 
3. Isolar cenários de execução: 
o Teste fluxos básicos e alternativos separadamente. 
o Verifique se o erro ocorre em todos os cenários ou apenas em casos 
específicos. 
4. Utilizar pontos de interrupção: 
o Identifique o ponto de entrada da aplicação (exemplo: tela de login). 
o Use breakpoints na IDE para interromper a execução e analisar 
comportamentos. 
 
 
6 
 
6 
Programação Para Dispositivos Móveis em Android 
 
Dica 
• Para depuração avançada, explore plug-ins de IDE e a documentação oficial do React 
Native. 
• Aprofunde seu conhecimento testando as ferramentas apresentadas! 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7 
 
7 
Programação Para Dispositivos Móveis em Android 
 
Interface Gráfica Com React Native 
 
1. Estruturação da Interface 
• Antes da codificação, é essencial planejar funcionalidades, navegação e experiência 
do usuário. 
• Garantir a melhor disposição dos elementos gráficos e interação fluida. 
2. Requisitos e Funcionalidades 
• Criar lista de funcionalidades do aplicativo (simples ou elaborada). 
• Exemplo: aplicativo bancário com fluxo de login, consultas e transações. 
• Definir quantidade de telas e componentes reutilizáveis. 
3. Escolha dos Componentes 
• Protótipos navegáveis (não abordado aqui, mas altamente recomendado). 
• Seleção de componentes nativos ou de terceiros: 
o Container principal: View 
o Scroll ajustável: ScrollView 
o SafeAreaView (área segura para iOS) e KeyboardAvoidingView (para evitar 
conflitos com teclado virtual). 
4. Componentes de Interface e Interação 
1. Modal – Exibe conteúdo adicional sem mudar de tela. 
2. Pressable – Elemento interativo semelhante a um botão. 
3. Button, TouchableHighlight, TouchableOpacity, TouchableWithoutFeedback – 
Interação com toque. 
4. ActivityIndicator – Exibe loading, essencial para indicar carregamentos de dados 
externos. 
5. Organização Visual 
• Componentizar elementos repetidos para reaproveitamento no código. 
• Utilizar View como contêiner para outros componentes. 
• Evitar aninhamento inadequado (exemplo: imagens dentro de elementos de texto). 
6. Outros Componentes 
• Componentes voltados para navegação entre telas e organização otimizada de 
recursos como listas e cards. 
 
 
 
 
8 
 
8 
Programação Para Dispositivos Móveis em Android 
 
1. Componentes de Lista 
Existem três principais componentes nativos para exibição de listas: 
1. VirtualizedList – Base para os demais componentes, otimizado para grandes conjuntos 
de dados. 
2. SectionList – Exibe dados organizados por seções (categorias). 
3. FlatList – Simples, altamente otimizado e suporta diversas funcionalidades. 
 
2. VirtualizedList 
• Otimização de consumo de memória e renderização eficiente. 
• Mantém uma janela finita de itens visíveis, substituindo os que saem de tela. 
• Renderiza incrementalmente para evitar espaços em branco. 
• Principais propriedades: 
o data – Lista de dados. 
o getItem – Função para acessar os itens. 
o getItemCount – Define número total de itens. 
o renderItem – Define o elemento a ser exibido. 
o keyExtractor – Identifica cada item da lista. 
o initialNumToRender – Número inicial de itens renderizados. 
 
3. SectionList 
• Permite agrupamento de dados em categorias, melhorando organização. 
• Propriedades principais: 
o sections – Define os grupos de dados. 
o renderSectionHeader – Exibe o título da categoria. 
 
4. FlatList 
• Renderiza listas simples com desempenho otimizado. 
• Recursos adicionais: 
o Compatível com Android e iOS. 
o Permite lista horizontal. 
o Suporte a cabeçalhos e rodapés. 
o Capacidade de separação entre itens. 
o Pull-to-refresh e scrolling dinâmico. 
 
5. Recursos Avançados 
• Atualização de dados: Utiliza extraData para monitorar mudanças. 
 
9 
 
9 
Programação Para Dispositivos Móveis em Android 
 
• Carregamento dinâmico: Com onEndReached, permite carregar mais conteúdo ao 
rolar a tela. 
 
1. Conceitos de Navegação 
• Termos comuns vindos do desenvolvimento web: 
o Páginas/Telas (Pages/Screens) 
o Menus e Navbar 
o Links internos e externos 
o Breadcrumb 
• Em aplicativos mobile, usamos o conceito de telas em vez de páginas. 
2. Configuração do Ambiente 
• Instalar dependências para navegação: 
• npm install @react-navigation/native react-native-reanimated 
react-native-gesture-handler react-native-screens react-native-
safe-area-context 
• Para Stack Navigation, instalar: 
• npm install @react-navigation/native-stack 
• Para Tab Navigation, instalar: 
• npm install @react-navigation/bottom-tabs 
3. Stack Navigation 
• Empilhamento de telas (como histórico de navegador). 
• Requer NavigationContainer e createNativeStackNavigator. 
• Definição no código: 
import { NavigationContainer } from '@react-navigation/native'; 
import { createNativeStackNavigator } from '@react-
navigation/native-stack'; 
 
const Stack = createNativeStackNavigator(); 
 
function App() { 
 return ( 
 
 
 
 
 
 
 ); 
} 
 
 
 
 
10 
 
10 
Programação Para Dispositivos Móveis em Android 
 
4. Tab Navigation 
• Navegação com guias/abas na parte inferior (ou superior). 
• Criado com createBottomTabNavigator. 
• Código básico: 
import { createBottomTabNavigator } from '@react-navigation/bottom-
tabs'; 
 
const Tab = createBottomTabNavigator(); 
 
function App() { 
 return ( 
 
 
 
 
 
 
 ); 
} 
5. Configurações Adicionais 
• Stack Navigator permite múltiplas pilhas de navegação. 
• Tab Navigator pode ser customizado com ícones. 
• Combinação de diferentes navegadores para uma experiência mais avançada. 
 
1. Conceito do Drawer Navigation 
• Modelo de navegação que apresenta um menu oculto, acessado ao arrastar a tela da 
esquerda (ou da direita). 
• Exibe opções de navegação quando aberto, permitindo acessar diferentes telas do 
aplicativo. 
2. Configuração do Ambiente 
• Instalar dependência: 
• npm install @react-navigation/drawer 
• Reutilizar estrutura de pastas e telas (Home, About) dos outros modelos de navegação. 
3. Criação do Drawer Navigation 
• Código básico: 
import { createDrawerNavigator } from '@react-navigation/drawer'; 
import { NavigationContainer } from '@react-navigation/native'; 
 
const Drawer = createDrawerNavigator(); 
 
function App() { 
return ( 
 
11 
 
11 
Programação Para Dispositivos Móveis em Android 
 
 
 
 
 
 
 
); 
} 
4. Navegação entre Telas 
• Alternar telas usando navigation.navigate('NomeDaTela'). 
• Histórico de navegação disponível com navigation.goBack(). 
• Abrir/Fechar Drawer: 
• navigation.openDrawer(); // Abre o menu lateral 
• navigation.closeDrawer(); // Fecha o menu 
5. Configuração Adicional 
• Pode ser estilizado e personalizado conforme necessário. 
• O initialRouteName define a tela que aparece ao iniciar o aplicativo. 
• Ícones e estilos podem ser adicionados para melhorar a interface. 
 
1. Estilização no React Native 
• Semelhante ao CSS, mas utilizando JavaScript via propriedade style. 
• Três formas de definir estilos: 
o Inline (style={{ color: 'blue' }}). 
o Interna (StyleSheet.create({...})). 
o Externa (arquivo .js separado, importado no código principal). 
2. Funcionamento da Propriedade Style 
• Declaraçãono padrão camelCase (exemplo: marginTop em vez de margin-top). 
• Exemplo de Inline Style: 
• Texto Azul 
• Exemplo de StyleSheet Interno: 
• import { StyleSheet } from 'react-native'; 
• 
• const styles = StyleSheet.create({ 
• textStyle: { 
• color: 'blue', 
• }, 
• }); 
• 
• Texto Azul 
3. Uso de Styled Components 
• Alternativa à propriedade style, permitindo estilização similar ao CSS tradicional. 
 
12 
 
12 
Programação Para Dispositivos Móveis em Android 
 
• Instalação via terminal: 
• npm install styled-components 
• Exemplo de uso: 
import styled from 'styled-components/native'; 
 
const StyledText = styled.Text` 
 color: blue; 
 font-size: 20px; 
`; 
 
Texto Azul 
• Principais vantagens: 
o Permite sobrescrever estilos facilmente. 
o Pode passar estilos como props entre componentes. 
o Suporte a animações (visto mais adiante). 
1. APIs de Animação 
O React Native disponibiliza duas APIs principais para animações: 
1. Animated API – Anima componentes de forma precisa e declarativa. 
2. LayoutAnimation API – Garante animações fluidas durante o ciclo de renderização. 
 
2. Animated API 
• Baseada em relações declarativas entre entradas e saídas. 
• Métodos para iniciar e parar animações. 
• Componentes compatíveis: 
o View, Text, Image, ScrollView, FlatList, SectionList. 
• Criação de componentes animáveis personalizados usando 
Animated.createAnimatedComponent(). 
Exemplo – Efeito Fade In 
• Hooks Utilizados: 
o useRef – Gerencia valores animados. 
o useEffect – Executa a animação ao renderizar o aplicativo. 
• Método Principal: 
o Animated.timing() – Define duração e comportamento da animação. 
Outros Recursos da Animated API 
• Configuração avançada de animações (tempo, funções de atenuação). 
• Composição de animações (sequenciais, paralelas). 
• Interpolação para ajustes dinâmicos. 
• Rastreamento de valores e gestos. 
 Dica: Consulte a documentação oficial para mais detalhes! 
 
13 
 
13 
Programação Para Dispositivos Móveis em Android 
 
 
3. LayoutAnimation API 
• Foca na animação do layout ao longo do ciclo de renderização. 
• Útil para ajustar a exibição dinâmica de elementos como "ver mais". 
• Menos controle que a Animated API, mas simplifica animações nativas. 
Exemplo – Redução de Tamanho de um Elemento 
• Quadrado diminui ao pressionar o botão. 
• Usado para transições fluidas sem necessidade de códigos complexos. 
 
 
Persistência de Dados Com React Native 
 
1. Conceitos de Armazenamento 
• Serialização: Transforma dados em uma estrutura contígua para transmissão ou 
armazenamento (exemplo: JSON ou XML). 
• Persistência: Garante que os dados armazenados possam ser recuperados 
posteriormente, mesmo após o encerramento do aplicativo. 
2. Serialização em React Native 
• Diferente da serialização binária usada em Java/C++, em React Native, os objetos são 
geralmente armazenados como JSON. 
• Transformação de objetos em JSON: 
• const produto = { id: 1, nome: "Celular" }; 
• const jsonProduto = JSON.stringify(produto); // Serialização 
• const objetoProduto = JSON.parse(jsonProduto); // Deserialização 
3. Persistência com AsyncStorage 
• Alternativa ao armazenamento síncrono (como fs do Node.js), evitando travamento 
da interface gráfica. 
• Armazena dados localmente de forma assíncrona. 
• Instalação: 
• npm install @react-native-async-storage/async-storage 
• Exemplo de uso: 
import AsyncStorage from '@react-native-async-storage/async-
storage'; 
 
// Gravar dados 
const salvarProduto = async () => { 
 try { 
 await AsyncStorage.setItem('produto', JSON.stringify({ id: 1, 
nome: "Celular" })); 
 
14 
 
14 
Programação Para Dispositivos Móveis em Android 
 
 } catch (error) { 
 console.error("Erro ao salvar:", error); 
 } 
}; 
 
// Recuperar dados 
const obterProduto = async () => { 
 try { 
 const produto = await AsyncStorage.getItem('produto'); 
 console.log("Produto recuperado:", JSON.parse(produto)); 
 } catch (error) { 
 console.error("Erro ao recuperar:", error); 
 } 
}; 
 
 
 
1. Conceito de Interoperabilidade 
• Compartilhamento de dados e serviços entre diferentes sistemas e plataformas. 
• Redução do retrabalho e melhoria na eficiência de comunicação. 
• Padronização de formatos e protocolos para facilitar integração. 
2. Evolução do Compartilhamento de Dados 
• Inicialmente, plataformas eram herméticas e não compartilhavam informações. 
• Com a popularização das redes de computadores, a necessidade de interoperabilidade 
cresceu. 
• Base de dados relacionais (Oracle, MySQL) permitiram múltiplos acessos por 
diferentes plataformas via SQL. 
3. Web Services e Protocolos 
• SOAP (XML-based) – Usado em comunicação B2B, mais formal. 
• RESTful (JSON-based) – Utiliza métodos HTTP (GET, POST, PUT, DELETE), voltado para 
B2C. 
• Permitem comunicação padronizada entre diferentes aplicações. 
4. Formatos de Dados Interoperáveis 
• XML – Estruturado, usado principalmente em SOAP. 
• JSON – Mais leve e flexível, padrão em RESTful. 
• Ambos são neutros em relação a linguagem, permitindo troca de informações entre 
sistemas heterogêneos. 
5. JSON no React Native 
• React Native facilita serialização e processamento de JSON para armazenamento e 
comunicação. 
• Necessário para integração com Web Services RESTful e armazenamento assíncrono. 
 
15 
 
15 
Programação Para Dispositivos Móveis em Android 
 
 
 
1. O que é AsyncStorage? 
• Persistência assíncrona baseada em chave-valor. 
• Armazena pequenas quantidades de dados localmente no dispositivo. 
• Objetos devem ser serializados em JSON para armazenamento. 
 
 
 
2. Métodos Principais 
Método Parâmetros Callback Funcionalidade 
getItem Chave (error, result) => void Obtém um item da coleção. 
setItem Chave, Valor (error) => void Armazena um item na coleção. 
removeItem Chave (error) => void Remove um item da coleção. 
mergeItem Chave, Valor (error) => void Atualiza um item existente. 
getAllKeys Nenhum (error, keys[]) => void Obtém todas as chaves armazenadas. 
multiGet Chave[] (errors[], result[]) => void Obtém múltiplos itens. 
3. Uso de Async/Await 
• async – Definição de funções assíncronas. 
• await – Espera pela execução do método antes de prosseguir. 
• Alternativamente, pode-se usar .then() para chamadas encadeadas. 
4. Exemplo: Armazenar Configuração de Tema 
import AsyncStorage from '@react-native-async-storage/async-storage'; 
 
async function salvarTema(tema: string) { 
 await AsyncStorage.setItem('tema', JSON.stringify(tema)); 
} 
 
async function obterTema() { 
 const tema = await AsyncStorage.getItem('tema'); 
 return tema ? JSON.parse(tema) : null; 
} 
 
16 
 
16 
Programação Para Dispositivos Móveis em Android 
 
5. Biblioteca de Persistência para Classe Produto 
• Criar classe GestorDados.ts com métodos: 
o salvarProduto – Serializa e armazena dados via setItem. 
o removerProduto – Exclui um item via removeItem. 
o obterProdutosJSON – Recupera todos os produtos serializados via 
multiGet. 
o obterProdutos – De-serializa os dados e retorna um vetor de objetos. 
 
 
 
 
 
1. O que é um banco de dados relacional? 
• Baseado na álgebra relacional e cálculo relacional. 
• Mantém consistência entre elementos armazenados. 
• Manipula dados como conjuntos matemáticos, aplicando operações como: 
o União, interseção e subtração. 
o Projeção, seleção e junção. 
2. Estrutura dos Dados Relacionais 
• Dados organizados em tabelas (conjuntos de registros). 
• Cada registro representa uma tupla (sequência de valores). 
• Relação entre tabelas por chaves primárias e estrangeiras. 
3. Exemplo de Junção Natural 
Aluno Curso 
Ana Claudia Engenharia 
Luiz Carlos Medicina 
Manoel Oliveira Engenharia 
Curso Coordenador 
Engenharia Rafael Santos 
Medicina Felipe Nascimento 
 
17 
 
17 
Programação Para DispositivosMóveis em Android 
 
Resultado da junção natural 
Aluno Curso Coordenador 
Ana Claudia Engenharia Rafael Santos 
Luiz Carlos Medicina Felipe Nascimento 
Manoel Oliveira Engenharia Rafael Santos 
4. Cálculo Relacional 
• Usa expressões formais para consulta de dados. 
• Introduz conceitos como "Existe" e "Para Todo". 
• Exemplos de consulta em SQL: 
• SELECT coordenador FROM Cursos 
• WHERE EXISTS (SELECT 1 FROM Alunos WHERE Alunos.Curso = 
Cursos.Curso); 
5. Relação com SQL e NoSQL 
• SQL é fundamentado em conceitos matemáticos, garantindo organização e 
desempenho nas consultas. 
• Alternativas como NoSQL são usadas para dados não estruturados ou escalabilidade 
massiva. 
6. Mapeamento Objeto-Relacional 
• Conversão de registros em coleções de objetos para facilitar integração em 
programação orientada a objetos. 
• Essencial para sistemas modernos. 
 
1. Estrutura da SQL 
A linguagem SQL é dividida em três áreas principais: 
• DDL (Data Definition Language) – Define estruturas do banco de dados (CREATE, 
ALTER, DROP). 
• DML (Data Manipulation Language) – Manipula dados (INSERT, UPDATE, DELETE). 
• Consultas (SELECT) – Recupera informações do banco. 
 
2. Comandos DDL 
• Criar tabelas e definir estrutura dos dados: 
CREATE TABLE PRODUTO ( 
 
18 
 
18 
Programação Para Dispositivos Móveis em Android 
 
 CODIGO INTEGER PRIMARY KEY, 
 NOME TEXT, 
 QUANTIDADE INTEGER 
); 
• Alterar (ALTER TABLE) e Excluir (DROP TABLE) tabelas. 
 
3. Comandos DML 
• Inserção de dados: 
• INSERT INTO PRODUTO (CODIGO, NOME, QUANTIDADE) 
• VALUES (1, 'Notebook', 5); 
• Atualização: 
• UPDATE PRODUTO SET QUANTIDADE = 10 WHERE CODIGO = 1; 
• Remoção: 
• DELETE FROM PRODUTO WHERE CODIGO = 1; 
 
4. Consultas com SELECT 
• Projeção (campos) e restrição (condições): 
• SELECT NOME FROM PRODUTO WHERE CODIGO BETWEEN 1 AND 5; 
Principais Operadores SQL 
Operador Utilização 
IN Filtra valores dentro de um conjunto. 
LIKE Busca por padrões (exemplo: nomes que começam com "A"). 
BETWEEN Filtra valores dentro de um intervalo. 
EXISTS Verifica existência de um valor na tabela. 
GROUP BY Agrupa registros baseados em colunas. 
HAVING Aplica restrições sobre os grupos criados. 
ORDER BY Ordena os registros de forma ascendente ou descendente. 
 
5. Consulta SQL Complexa 
Busca os produtos com a quantidade máxima e nomes iniciados com 'A': 
SELECT NOME, CODIGO FROM PRODUTO 
WHERE QUANTIDADE = (SELECT MAX(QUANTIDADE) FROM PRODUTO) 
AND NOME LIKE 'A%'; 
 
 
19 
 
19 
Programação Para Dispositivos Móveis em Android 
 
 
Aqui está um resumo estruturado sobre Banco de Dados SQLite: 
1. O que é o SQLite? 
• Banco de dados relacional, mas sem necessidade de servidor. 
• Minimalista, autossuficiente e de código aberto. 
• Usado amplamente em sistemas móveis e parte da arquitetura Android. 
• Armazena dados localmente, como um arquivo comum. 
2. Características do SQLite 
• Leve (menos de 600KB). 
• Alta capacidade de armazenamento (até 281 TB). 
• Copiável diretamente entre sistemas sem necessidade de configuração. 
• Não possui sistema de usuários, a segurança depende do sistema operacional. 
• Modelo ACID: Garante consistência e integridade dos dados. 
3. Exemplo de Uso no React Native 
import * as SQLite from 'expo-sqlite'; 
 
const db = SQLite.openDatabase("LojaDatabase.db"); 
 
db.transaction(tx => { 
 tx.executeSql( 
 "SELECT * FROM PRODUTO", 
 [], 
 (_, result) => console.log("Total de registros:", 
result.rows.length), 
 (_, error) => console.error("Erro ao consultar:", error) 
 ); 
}); 
• openDatabase("LojaDatabase.db") – Cria/abre um banco de dados. 
• transaction(tx => {...}) – Inicia uma transação. 
• executeSql() – Executa um comando SQL. 
• Callbacks tratam sucesso e erro. 
4. Tabelas de Catálogo no SQLite 
Tabela Campo Descrição 
sqlite_master name, sql Contém os nomes e definições das tabelas. 
sqlite_sequence name, sql Armazena valores de autoincremento. 
sqlite_stat1 tbl, idx, stat Dados sobre otimização de consultas. 
5. Comando para Listar Todas as Tabelas 
 
20 
 
20 
Programação Para Dispositivos Móveis em Android 
 
SELECT name FROM sqlite_master WHERE type='table'; 
 
 
1. Adaptação para SQLite 
• Reaproveitamento do código da versão anterior (persistência baseada em arquivos). 
• Mudança principal na classe GestorDados.ts, alterando a forma de 
armazenamento. 
2. Configuração do Projeto 
• Criar um projeto React Native com suporte a SQLite: 
• npm install expo-sqlite 
• Copiar os arquivos App.js, CommonStyles.js, ProdutoForm.js, ProdutoItem.js, 
ProdutoLista.js. 
• Criar Produto.ts no diretório dados. 
3. Definição da Conexão SQLite 
• Criar DatabaseInstance.js para abrir conexão: 
import * as SQLite from 'expo-sqlite'; 
const db = SQLite.openDatabase("LojaDatabase.db"); 
export default db; 
4. Implementação da Classe GestorDados.ts 
• Define comandos SQL: 
const sqlCreate = "CREATE TABLE IF NOT EXISTS PRODUTO (CODIGO 
INTEGER PRIMARY KEY, NOME TEXT, QUANTIDADE INTEGER);"; 
const sqlSelect = "SELECT * FROM PRODUTO;"; 
const sqlInsert = "INSERT INTO PRODUTO (CODIGO, NOME, QUANTIDADE) 
VALUES (?, ?, ?);"; 
const sqlDelete = "DELETE FROM PRODUTO WHERE CODIGO = ?;"; 
• Método criarBanco() para inicialização automática. 
• Uso de executeSql() dentro de transações (transaction()) para garantir 
segurança e eficiência. 
5. Modificação em ProdutoLista.js 
• Alteração na recuperação de dados: 
• gestorDados.obterTodos(produtos => setProdutos(produtos)); 
• Substituição do operador .then() por callbacks para melhor integração com o 
SQLite. 
6. Mapeamento Objeto-Relacional 
 
21 
 
21 
Programação Para Dispositivos Móveis em Android 
 
• Evita manipulação direta de registros. 
• Converte tabelas e registros em entidades (Produto). 
7. Execução do Aplicativo 
• Rodar o Expo: 
• npm start 
• Usar modo Tunnel para execução no celular via QR Code. 
 
1. O que é um OODBMS? 
• Sistema de banco de dados orientado a objetos (Object-Oriented Database 
Management System). 
• Representação mais eficaz de estruturas complexas comparado aos bancos 
relacionais. 
• Usa conceitos da orientação a objetos, como herança e polimorfismo. 
2. Diferenças entre OODBMS e Relacional 
• OODBMS: Modela entidades próximas ao mundo real, utilizando classes e ponteiros 
em vez de tabelas. 
• Banco Relacional: Estruturado em tabelas e depende de junções para 
relacionamentos. 
Exemplo de OODBMS vs Relacional 
Modelo Orientado a Objetos Modelo Relacional 
Classe Pessoa → Classe Profissional 
(herança) 
Tabela Pessoa + Tabela Profissional 
(relacionamento 1:1) 
Usa ponteiros para acesso rápido Usa joins para ligar dados 
3. Vantagens do OODBMS 
• Execução rápida (acesso por ponteiros). 
• Facilidade na modelagem de dados complexos. 
• Boa escalabilidade para armazenamento massivo (exemplo: 900TB no SLAC). 
4. Desvantagens do OODBMS 
• Não possui um modelo universal de dados. 
• Sem linguagem de consulta padronizada (como SQL). 
• Não suporta consultas aninhadas. 
• Não tem bases matemáticas robustas como álgebra relacional. 
 
 
22 
 
22 
Programação Para Dispositivos Móveis em Android 
 
1. Origem e Desenvolvimento 
• Surgiu em 1985, resultado de pesquisas da Bell Labs, Texas Instruments, Hewlett-
Packard e outras empresas. 
• Primeiros produtos incluem GemStone, Versant, Matisse e Objectivity/DB. 
2. Padrões ODMG (Object Database Management Group) 
• Criado em 1991 por Rick Cattell (Sun Microsystems). 
• Objetivo: Definir padrões para bancos orientados a objetos. 
• Padrões definidos: 
o ODL (Object Definition Language) – Estrutura de objetos. 
o OIF (Object Interchange Format) – Intercâmbio de dados. 
o OQL (Object Query Language) – Consulta de objetos (similar ao SQL). 
3. Evolução e Declínio do ODMG 
• Versão 3.0 lançada em 2000 para padronização do mercado. 
• Conectores para diversas linguagens: C++, Smalltalk, Java. 
• Em 2001, o padrão Java ODMG foi incorporadoà JDO (Java Data Objects). 
• ODMG foi descontinuado em 2001, encerrando a busca por um padrão universal. 
4. Bancos de Dados OODBMS Modernos 
• Várias opções surgiram ao longo do tempo (DB-Engines classifica os mais utilizados). 
• Realm como alternativa em React Native, por sua facilidade de uso. 
• Embora classificado como NoSQL, o Realm mantém características do modelo 
orientado a objetos. 
 
 
1. O que é Realm? 
• Alternativa ao SQLite, voltada para armazenamento orientado a objetos. 
• Fácil de usar, sem necessidade de mapeamento objeto-relacional. 
• Compatível com diversas linguagens: Swift, Java, Kotlin, C#, JavaScript. 
 
2. Características do Realm 
• Leve, independente e funcional. 
• Baixo consumo de memória e uso reduzido de espaço em disco. 
• Ótimo para apps offline e plataformas móveis. 
 
 
23 
 
23 
Programação Para Dispositivos Móveis em Android 
 
3. Configuração no React Native 
• Instalação: 
npm install realm 
• Definição de Banco (DatabaseInstance.js): 
import Realm from "realm"; 
 
const ProdutoSchema = { 
 name: "Produto", 
 primaryKey: "codigo", 
 properties: { 
 codigo: "int", 
 nome: "string", 
 quantidade: "int", 
 }, 
}; 
 
const db = new Realm({ path: "LojaDatabase.realm", schema: 
[ProdutoSchema] }); 
 
export default db; 
 
4. Operações em Realm 
Consulta de dados 
const produtos = db.objects("Produto").filtered("codigo > 100"); 
produtos.forEach(produto => console.log(produto.codigo, 
produto.nome)); 
Inserção 
db.write(() => { 
 db.create("Produto", { codigo: 1, nome: "Celular", quantidade: 5 }); 
}); 
Exclusão 
db.write(() => { 
 let produto = db.objectForPrimaryKey("Produto", 1); 
 db.delete(produto); 
}); 
 
5. Métodos Principais do Realm 
Método Utilização 
open() Abre conexão com o banco. 
close() Fecha a conexão. 
write() Define um bloco de escrita. 
 
24 
 
24 
Programação Para Dispositivos Móveis em Android 
 
Método Utilização 
create() Adiciona um objeto ao banco. 
delete() Remove um objeto do banco. 
objects() Retorna coleção de objetos. 
objectForPrimaryKey() Obtém objeto pela chave primária. 
beginTransaction() Inicia uma transação manual. 
commitTransaction() Confirma a transação. 
cancelTransaction() Cancela operações pendentes. 
 
 
 
 
6. Relacionamento entre Classes 
const PessoaSchema = { 
 name: "Pessoa", 
 primaryKey: "nome", 
 properties: { 
 nome: "string", 
 fotografia: "string?", 
 carros: { type: "list", objectType: "Carro" }, 
 }, 
}; 
• Atributo carros define uma coleção de objetos da classe Carro. 
 
7. Controle Transacional 
db.beginTransaction(); 
try { 
 db.create("Pessoa", { nome: "João", carros: [] }); 
 db.commitTransaction(); 
} catch (error) { 
 db.cancelTransaction(); 
 console.error("Erro na transação:", error); 
} 
 
 
 
25 
 
25 
Programação Para Dispositivos Móveis em Android 
 
1. Configuração do Projeto 
• Criar um novo projeto e instalar Realm: 
• npm install realm 
• Copiar arquivos do primeiro exemplo (CadastroLocal): 
o App.js 
o CommonStyles.js 
o ProdutoForm.js 
o ProdutoItem.js 
o ProdutoLista.js 
o Produto.ts (diretório dados) 
 
 
2. Definição da Conexão com o Banco (DatabaseInstance.js) 
• Criar um objeto Realm com configuração: 
import Realm from "realm"; 
 
const ProdutoSchema = { 
 name: "Produto", 
 primaryKey: "codigo", 
 properties: { 
 codigo: "int", 
 nome: "string", 
 quantidade: "int", 
 }, 
}; 
 
const db = new Realm({ path: "LojaDatabase.realm", schema: 
[ProdutoSchema] }); 
 
export default db; 
 
3. Implementação da Classe GestorDados.ts 
• Responsável pela gerência das operações (consulta, adição e remoção). 
• Método adicionar: 
db.write(() => { 
 db.create("Produto", { codigo: 1, nome: "Celular", quantidade: 5 
}); 
}); 
Método remover: 
db.write(() => { 
 let produto = db.objects("Produto").filtered("codigo == 1")[0]; 
 db.delete(produto); 
}); 
 
26 
 
26 
Programação Para Dispositivos Móveis em Android 
 
Método obterTodos: 
function obterTodos(): Produto[] { 
 let realmProdutos = db.objects("Produto"); 
 return realmProdutos.map(produto => 
JSON.parse(JSON.stringify(produto))); 
} 
 
4. Conversão de Objetos 
• Realm retorna objetos como Realm.Object, necessitando conversão via JSON antes 
de armazená-los em um vetor. 
 
5. Execução do Aplicativo 
• Rodar Expo: 
• npm start 
• Persistência agora baseada em Realm, mantendo a mesma interface do primeiro 
exemplo. 
1. Evolução do termo NoSQL 
• Inicialmente referia-se a bancos não relacionais, sem suporte à SQL. 
• Mudança de conceito → Significa Not Only SQL, ou seja, bancos que combinam 
diferentes modelos de dados. 
• Com o Big Data, surgiu a necessidade de alta escalabilidade e processamento 
distribuído, levando à adoção do NoSQL. 
2. Características dos Bancos NoSQL 
• Maior flexibilidade nos modelos de armazenamento. 
• Menos preocupação com consistência, priorizando disponibilidade e velocidade. 
• Não seguem esquemas fixos, permitindo ajustes dinâmicos. 
3. Modelos de Bancos NoSQL 
Chave-Valor 
• Armazenamento simples, onde uma chave referencia um valor. 
• Exemplo: Oracle Berkeley DB (com suporte a transações e versionamento). 
Colunar 
• Extensão do modelo chave-valor, armazenando dados em colunas organizadas por 
famílias. 
• Exemplo: HBase, baseado no Google Big Table, com suporte a Hadoop e MapReduce. 
 
27 
 
27 
Programação Para Dispositivos Móveis em Android 
 
Documental 
• Usa chave associada a um documento (JSON, XML, YAML, etc.). 
• Exemplo: MongoDB (armazenamento em JSON). 
Grafos 
• Representação baseada em vértices e arestas, ideal para relacionamentos complexos. 
• Exemplo: Neo4J, suporte a transações e consultas flexíveis. 
4. Comparação entre NoSQL e Relacional 
Banco Relacional Banco NoSQL 
Esquema fixo Estrutura flexível 
Relações por chaves estrangeiras Relações dinâmicas 
Consistência forte (ACID) Disponibilidade e escalabilidade 
SQL para consultas Métodos variados (JSON, MapReduce, etc.) 
 
1. O que é MongoDB? 
• Banco NoSQL baseado em documentos (modelo JSON). 
• Permite hierarquias de dados, facilitando modelagem complexa. 
• Suporte a consultas avançadas (por campo, faixa de valores, expressões regulares, 
etc.). 
• Ideal para Big Data, devido à alta escalabilidade. 
 
2. Instalação e Configuração 
• Baixar e instalar MongoDB Community Edition: 
o Link: MongoDB Download 
• MongoDB é instalado como: 
o Serviço do sistema (pode ser iniciado manualmente). 
o MongoDB Compass (gerenciador gráfico). 
 
3. Criação de Banco e Coleção 
• Criar um banco "loja" e uma coleção "produtos" no Compass. 
• Não selecionar "Capped Collection" (impede remoção de registros). 
 
https://www.mongodb.com/try/download/community
 
28 
 
28 
Programação Para Dispositivos Móveis em Android 
 
4. Inserção de Documentos JSON 
• Exemplo de documento MongoDB: 
{ 
 "_id": 1, 
 "nome": "Celular", 
 "quantidade": 500, 
 "cores": ["preto", "azul"] 
} 
 
5. Principais Operadores de Consulta 
Operador Utilização 
$gt Valores maiores que o especificado. 
$lt Valores menores que o especificado. 
$in Verifica presença em lista de valores. 
$or Combina condições com OR lógico. 
$exists Retorna documentos que contêm determinado campo. 
$regex Busca utilizando expressão regular. 
 
6. Inserção em Bloco no Shell MongoDB 
db.inventario.insertMany([ 
 { _id: 1, nome: "Caneta", quantidade: 150, cores: ["vermelho", 
"azul"] }, 
 { _id: 2, nome: "Pilot", quantidade: 200, cores: ["vermelho", 
"azul"] } 
]); 
 
7. Consultas 
• Buscar produtos com quantidade acima de 500: 
• db.produtos.find({ quantidade: { $gt: 500 } }); 
• Buscar produtos que contêm "vermelho" e "azul": 
• db.inventario.find({ cores: { $all: ["vermelho", "azul"] } }); 
 
8. Integração com Aplicativos 
• MongoDB exige um servidor web para acesso remoto via dispositivos móveis. 
• Sugestão:Utilizar Node.js com Express para criar uma API REST. 
 
29 
 
29 
Programação Para Dispositivos Móveis em Android 
 
 
1. Introdução 
• MongoDB exige interface de acesso via rede, necessitando um servidor Web. 
• Usaremos Node.js + Express para criar um servidor minimalista. 
 
2. Configuração do Projeto 
• Instalar Express e MongoDB: 
• npm install express mongodb 
• Criar GestorDB.js no diretório dados. 
 
3. Implementação de GestorDB.js 
• Conexão ao MongoDB: 
const { MongoClient } = require("mongodb"); 
const uri = "mongodb://localhost:27017"; 
const client = new MongoClient(uri); 
 
client.connect().then(() => { 
 global.conn = client.db("loja"); // Seleciona o banco de dados 
"loja" 
}); 
• Funções de CRUD: 
async function findAll() { 
 return await global.conn.collection("produtos").find().toArray(); 
} 
 
async function insert(produto) { 
 return await 
global.conn.collection("produtos").insertOne(produto); 
} 
 
async function deleteOne(codigo) { 
 return await global.conn.collection("produtos").deleteOne({ _id: 
codigo }); 
} 
 
4. Criação do Servidor Web (index.js - diretório routes) 
• Definição das rotas REST: 
const express = require("express"); 
const router = express.Router(); 
 
 
30 
 
30 
Programação Para Dispositivos Móveis em Android 
 
// Rota para listar todos os produtos (GET) 
router.get("/", async (req, res) => { 
 try { 
 const docs = await findAll(); 
 res.json(docs.map(doc => ({ id: doc._id, nome: doc.nome, 
quantidade: doc.quantidade }))); 
 } catch (error) { 
 res.status(500).json({ error: error.message }); 
 } 
}); 
 
// Rota para inserir um novo produto (POST) 
router.post("/new", async (req, res) => { 
 try { 
 await insert(req.body); 
 res.status(201).json({ message: "Produto inserido com sucesso" 
}); 
 } catch (error) { 
 res.status(500).json({ error: error.message }); 
 } 
}); 
 
// Rota para remover um produto (DELETE) 
router.delete("/remove/:codigo", async (req, res) => { 
 try { 
 await deleteOne(parseInt(req.params.codigo)); 
 res.json({ message: "Produto removido com sucesso" }); 
 } catch (error) { 
 res.status(500).json({ error: error.message }); 
 } 
}); 
 
module.exports = router; 
 
5. Métodos HTTP REST 
Método HTTP Uso 
GET Busca entidades em formato JSON. 
POST Insere nova entidade a partir de JSON. 
PUT Edita uma entidade existente. 
DELETE Remove entidade por chave primária. 
 
6. Iniciando o Servidor 
• Criar server.js e iniciar com: 
const express = require("express"); 
const app = express(); 
const port = 3000; 
 
 
31 
 
31 
Programação Para Dispositivos Móveis em Android 
 
app.use(express.json()); 
app.use("/", require("./routes/index")); 
 
app.listen(port, () => { 
 console.log(`Servidor rodando em http://localhost:${port}`); 
}); 
• Rodar servidor Express: 
• node server.js 
• Acessar API REST via: 
o http://localhost:3000/ → Listar produtos. 
o http://localhost:3000/new (POST) → Inserir produto. 
o http://localhost:3000/remove/:codigo (DELETE) → Excluir produto. 
 
 
 
 
1. Configuração do Ambiente 
• O MongoDB exige um servidor para ser acessado via rede. 
• O Android não permite localhost como origem devido à segurança do Linux. 
• Recomendação: Utilizar ngrok para gerar URLs acessíveis via HTTPS. 
 
2. Configuração do Tunelamento (ngrok) 
• Instalação do ngrok: Baixar no site oficial. 
• Execução do tunelamento: 
• ngrok http 3000 
• Gera dois endereços, um HTTP e outro HTTPS, que variam a cada execução. 
 
3. Criação do Projeto Cliente 
• Criar novo projeto React Native e instalar dependências: 
• npx react-native init CadastroMongo 
• Copiar arquivos do projeto CadastroRealm: 
o App.js 
o CommonStyles.js 
o ProdutoForm.js 
o ProdutoItem.js 
o ProdutoLista.js 
o Produto.ts (diretório dados). 
 
 
32 
 
32 
Programação Para Dispositivos Móveis em Android 
 
4. Conexão com Servidor (ApiService.ts) 
• Instalar Axios: 
npm install axios 
Criar conexão com baseURL do ngrok: 
import axios from "axios"; 
 
const api = axios.create({ 
 baseURL: "https://seu-endereco-ngrok.io", 
}); 
 
export default api; 
 
5. Implementação do Gestor de Dados (GestorDados.ts) 
Remover Produto 
async function remover(codigo: number) { 
 await api.delete(`/remove/${codigo}`); 
} 
Adicionar Produto 
async function adicionar(produto: Produto) { 
 await api.post("/new", produto); 
} 
Obter Todos os Produtos 
async function obterTodos(): Promise { 
 const response = await api.get("/"); 
 return response.data; 
} 
 
6. Execução do Projeto 
• Iniciar MongoDB, Express e ngrok. 
• Rodar React Native: 
• npx react-native run-android 
• O aplicativo funciona como os exemplos anteriores, mas agora com persistência 
remota no MongoDB! 
 
 
 
 
 
 
 
 
33 
 
33 
Programação Para Dispositivos Móveis em Android 
 
 
 
 
 
 Conexão Remota com React Native – Resumo 
 Objetivo Geral 
Estudar os componentes, ferramentas e técnicas para desenvolvimento de apps mobile 
em React Native com foco em conexão remota, persistência de dados e 
funcionamento offline. 
 
 1. Componentes para Conexão em Rede 
 Tipos de Recursos Acessados 
• Login/autenticação 
• APIs de terceiros 
• Persistência de dados em servidores 
 Ferramentas principais 
• Fetch API (nativa): suporta métodos HTTP (GET, POST etc.). 
• Axios (biblioteca externa): facilita o consumo de APIs, com tratamento de erros 
e instâncias personalizadas. 
 Exemplos práticos 
• Requisições GET/POST com Fetch e Axios 
• Criação de instância Axios para reutilização 
• Tratamento de resposta e erros com .then e .catch 
 
 2. Persistência Remota com Controle de Acesso (REST) 
 Conceito de REST 
• Arquitetura baseada em cliente-servidor 
• Comunicação via verbos HTTP (GET, POST, PUT etc.) 
• Dados geralmente em formato JSON 
 Exemplos práticos 
• Envio de dados via Axios (POST) 
 
34 
 
34 
Programação Para Dispositivos Móveis em Android 
 
• Atualização de dados com PUT 
• Requisições autenticadas com Bearer Token 
• Testes com APIs públicas como gorest.co.in 
 Controle de Acesso com OAuth2 
• Papéis: Dono do recurso, Cliente, Servidor de Recurso, Servidor de Autorização 
• Fluxos: 
o Código de Autorização 
o Fluxo Implícito 
o Credenciais do Proprietário do Recurso 
o Credenciais do Cliente 
• Ferramentas: 
o Firebase Authentication 
o Auth0 
o Keycloak 
o react-native-app-auth 
 
 3. Modelo Offline First 
 Objetivo 
Permitir o funcionamento do app com ou sem internet. 
 Fluxo 
1. Verifica conexão com a internet 
2. Usa banco local (embarcado) quando offline 
3. Sincroniza dados com servidor quando online 
 Banco de dados embarcado 
• Realm, AsyncStorage, SQLite, PouchDB, WatermelonDB 
• Exemplo de uso com Realm (modelo Produto) 
 Sincronização e Controle 
• Bibliotecas: 
o react-native-offline 
o redux-offline 
 
35 
 
35 
Programação Para Dispositivos Móveis em Android 
 
• Interface otimista: responde rápido ao usuário e sincroniza depois 
 
 4. Considerações Finais 
• React Native suporta conexão remota com APIs e bancos de dados 
• Modelos como OAuth2 e Offline First aumentam a segurança e a experiência 
do usuário 
• Ferramentas externas são indispensáveis para apps profissionais 
 
 Dicas para estudo 
• Pratique as requisições com APIs públicas 
• Simule cenários offline/online no app 
• Experimente persistência com Realm ou SQLite 
• Estude o fluxo de autenticação OAuth2 com Firebase ou Auth0 
 
 
 
 Tópicos Avançados em React Native – Resumo Completo 
 Objetivo Geral 
Capacitar o aluno a construir aplicativos seguros, organizados e profissionais com 
React Native, empregando: 
• Arquiteturas modernas (MVC, Flux e Redux) 
• Criptografia 
• Testes 
• Publicação de apps 
 
1️⃣ Arquitetura MVC com React Native 
 Padrõesde Projeto (GoF) 
• Criacionais: Singleton, Factory Method 
• Estruturais: Facade, Composite, Proxy 
• Comportamentais: Observer, Strategy, Iterator, Template Method 
 
36 
 
36 
Programação Para Dispositivos Móveis em Android 
 
 MVC na prática 
• Model: regras de dados + acesso ao banco (com DAOs) 
• View: interface com o usuário (React components) 
• Controller: regras de negócio e lógica de controle 
 GenericDAO + SQLite 
• Classe genérica com métodos CRUD usando SQL 
• DAO implementa o padrão Template Method 
• Exemplo com entidade Aluno 
 
2️⃣ Arquitetura Flux com React Native 
 Fluxo unidirecional de dados 
• View → Action → Dispatcher → Store → View 
 Componentes 
• Action: cria mensagens para o Dispatcher 
• Dispatcher: central de encaminhamento 
• Store: lógica de negócio + dados 
• View: escuta Store via eventos 
 Exemplo com cadastro de alunos 
• Reaproveita Model do MVC 
• Listener atualizado com evento personalizado 'ALUNOS_CHANGE' 
 
3️⃣ Arquitetura Redux com React Native 
 Destaques 
• Sem dispatcher e eventos personalizados 
• Uso de: 
o Reducer: função pura que altera o estado 
o Store: centraliza estado 
o Actions: funções que retornam { type, payload } 
 Benefícios 
• Código previsível 
 
37 
 
37 
Programação Para Dispositivos Móveis em Android 
 
• Facilidade para testes 
• Escalabilidade 
 Exemplo prático 
• Redux com RealmDB 
• Armazena e consulta alunos via DAO 
• AlunoTela.js atualiza via store.dispatch e store.subscribe 
 
4️⃣ Criptografia com React Native 
 Tipos de criptografia 
• Simétrica (AES, RC4): mesma chave para codificar/decodificar 
• Assimétrica (RSA): chave pública + chave privada 
• Hash (MD5, SHA1): irreversível (ex: senhas) 
 Bibliotecas utilizadas 
• react-native-crypto-js 
• react-native-base64 
• react-native-encrypted-storage 
 Classes criadas 
• StoredKey: armazena chave e vetor de inicialização 
• Utils: manipula WordArray ↔ Uint8Array 
• KeyGenerator: cria/restaura chave 
• Cipher: criptografa e decriptografa textos 
 Cadastro com campo criptografado 
• Modificação da AlunoDAO para criptografar o campo nome 
• Transparência para outras camadas 
 
 Outros Recursos 
• Testes com Jest (mencionados como boa prática) 
• Publicação em lojas (Google Play / App Store – contexto citado) 
 
 Conclusão 
 
38 
 
38 
Programação Para Dispositivos Móveis em Android 
 
Com esses conhecimentos, você será capaz de: 
• Criar apps modulares, escaláveis e seguros 
• Aplicar boas práticas de arquitetura 
• Proteger dados sensíveis do usuário 
• Integrar fluxos unidirecionais e gerência de estado 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39 
 
39 
Programação Para Dispositivos Móveis em Android 
 
 
Abaixo, as 50 questões mais recorrentes em provas AV/AVS dos últimos 3 anos, 
organizadas por temas para facilitar o estudo. Cada questão está acompanhada da 
resposta correta. 
 
1. Ambiente de Desenvolvimento e Ferramentas 
1. Como instalar o Expo CLI localmente via NPM? 
Resposta: npm install expo-cli 
2. Como instalar um pacote globalmente com NPM? 
Resposta: npm install -g 
3. Qual comando inicia um projeto Expo? 
Resposta: expo init 
4. O que é o Expo Client? 
Resposta: Um aplicativo que permite rodar projetos Expo diretamente no 
dispositivo. 
5. Para que serve o arquivo app.json em projetos Expo? 
Resposta: Configurações do projeto, como nome, ícone, splash, etc. 
6. O que é o arquivo package.json? 
Resposta: Lista dependências e scripts do projeto Node.js/React Native. 
7. Como atualizar dependências de um projeto? 
Resposta: npm update ou yarn upgrade 
8. Qual comando é utilizado para empacotar um app Android nativo para 
distribuição? 
Resposta: gradlew 
9. Sobre ambientes de desenvolvimento para dispositivos móveis, qual 
afirmação é verdadeira? 
Resposta: É possível existir um ambiente de desenvolvimento heterogêneo, sem 
restrições quanto ao uso de gerenciadores de pacotes, IDEs ou formas de 
desenvolver/testar aplicativos. 
 
2. Estrutura e Componentes do React Native 
10. JSX é: 
Resposta: Uma extensão para arquivos JavaScript, convertida em JavaScript 
durante o build. 
11. O que é um componente funcional em React Native? 
Resposta: Função que retorna JSX. 
 
40 
 
40 
Programação Para Dispositivos Móveis em Android 
 
12. Como importar um componente em React Native? 
Resposta: import NomeComponente from './Caminho' 
13. O que é o componente View em React Native? 
Resposta: Container genérico para layout. 
14. Como definir estilos em React Native? 
Resposta: Usando o objeto StyleSheet. 
15. O que é o Flexbox em React Native? 
Resposta: Sistema de layout para alinhar e distribuir espaço entre componentes. 
16. Como centralizar um componente com Flexbox? 
Resposta: Usando justifyContent: 'center' e alignItems: 'center'. 
17. Como exibir imagens em React Native? 
Resposta: Usando o componente . 
18. Para que serve o componente ? 
Resposta: Permite rolar o conteúdo vertical ou horizontalmente. 
19. Como manipular eventos de toque em React Native? 
Resposta: Usando o componente TouchableOpacity ou TouchableHighlight. 
20. O que é o método onPress? 
Resposta: Evento disparado ao pressionar um componente touchable. 
 
3. Estado, Props e Hooks 
21. Qual a diferença entre props e state em componentes React Native? 
Resposta: Props são imutáveis e passadas pelo componente pai; state é mutável 
e gerenciado pelo próprio componente. 
22. Qual a principal função do método setState? 
Resposta: Atualizar o estado do componente. 
23. Para que serve o useEffect em React Native? 
Resposta: Executa efeitos colaterais em componentes funcionais. 
24. O que é um hook em React Native? 
Resposta: Função especial para gerenciar estado e ciclo de vida em 
componentes funcionais. 
25. Como funciona o ciclo de vida de um componente React Native? 
Resposta: Montagem, atualização e desmontagem. 
 
4. Listas e Renderização de Dados 
26. Para que serve o FlatList? 
Resposta: Renderizar listas de dados de forma eficiente. 
 
41 
 
41 
Programação Para Dispositivos Móveis em Android 
 
27. Qual a função do atributo keyExtractor em FlatList? 
Resposta: Define como extrair a chave única de cada item. 
28. Como exibir uma lista agrupada em React Native? 
Resposta: Usando o componente SectionList. 
29. Em uma SectionList, qual propriedade define o agrupamento dos dados? 
Resposta: sections 
30. Qual a principal diferença entre FlatList e VirtualizedList? 
Resposta: O VirtualizedList oferece um suporte melhor a dados imutáveis. 
31. Qual propriedade permite carregar mais dados sob demanda em listas do 
React Native? 
Resposta: onEndReached 
32. Qual a função do método renderItem em listas do React Native? 
Resposta: Define como cada item da lista será renderizado. 
 
5. Navegação 
33. O que é o React Navigation? 
Resposta: Biblioteca para navegação entre telas em React Native. 
34. Como criar navegação em pilha (stack) em React Native? 
Resposta: Usando o Stack Navigator do React Navigation. 
35. Como navegar para outra tela usando React Navigation? 
Resposta: navigation.navigate('NomeDaTela') 
36. O que é o método push em navegação stack? 
Resposta: Adiciona uma nova tela ao topo da pilha. 
37. Como remover uma tela da pilha de navegação? 
Resposta: navigation.goBack() 
38. O que é o método pop em navegação stack? 
Resposta: Remove a tela atual da pilha. 
39. O Stack Navigator permite a navegação pelas telas do aplicativo por meio 
de qual método? 
Resposta: navigate ou botão de voltar inserido por default. 
 
6. Armazenamento e Comunicação 
40. O que é o AsyncStorage? 
Resposta: API para armazenamento local simples em React Native. 
41. Como acessar APIs REST em React Native? 
Resposta: Usando fetch ou axios. 
 
42 
 
42 
Programação Para Dispositivos Móveis em Android42. Como tratar erros em requisições fetch? 
Resposta: Usando try/catch ou .catch(). 
43. Como lidar com permissões em apps Android? 
Resposta: Usando a API Permissions do Expo ou do React Native. 
 
7. Arquitetura, Padrões e Testes 
44. O que caracteriza um aplicativo Offline First? 
Resposta: Funciona de forma semelhante independentemente de possuir ou não 
conexão com a internet. 
45. Por que a identificação correta do usuário é importante em apps Offline 
First? 
Resposta: Os dados são armazenados localmente e sincronizados remotamente; 
não identificar o usuário pode gerar inconsistência. 
46. Sobre o padrão de projeto em Stores na arquitetura Flux, qual é o mais 
indicado? 
Resposta: Singleton 
47. O que faz um componente mock em testes? 
Resposta: Simula comportamentos de componentes reais para testar 
funcionalidades isoladas. 
48. Muitas vezes, precisamos testar a conexão com um banco de dados ou 
servidor na rede antes que ele seja implementado. Qual instrumento de 
programação poderia ser utilizado? 
Resposta: Componente mock 
 
8. JavaScript Essencial para React Native 
49. O que é o método map em JavaScript? 
Resposta: Itera sobre arrays e retorna um novo array. 
50. O que é o método filter em JavaScript? 
Resposta: Filtra elementos de um array conforme uma condição.

Mais conteúdos dessa disciplina