1. Introdução
O Modelo computacional Cliente-Servidor é utilizado para a troca
de informações através de um ou mais serviço fornecido pelo servidor e onde o
cliente representa uma entidade que consome os serviços de outra entidade
servidora. O modelo cliente-servidor se tornou uma das ideias centrais de
computação de rede ganhando mais força com a internet.
Hoje, a grande maioria dos aplicativos de negócios utiliza o modelo cliente-servidor. O serviço JSON que iremos apresentar neste artigo assim como o software desenvolvido para Android estão enquadrados neste modelo tornando-o mais flexível na distribuição dos dados gerados.
Hoje, a grande maioria dos aplicativos de negócios utiliza o modelo cliente-servidor. O serviço JSON que iremos apresentar neste artigo assim como o software desenvolvido para Android estão enquadrados neste modelo tornando-o mais flexível na distribuição dos dados gerados.
O Android é um sistema
operacional baseado em Linux desenvolvido inicialmente para dispositivos móveis
pela Google. Android conta com o Linux versão 2.6 para o sistema central de
serviços, como segurança, gerenciamento de memória, gestão de processos, pilha
de rede e modelo de driver. O núcleo também atua como uma camada de abstração entre
o hardware e o resto da pilha de
software.
As aplicações Android são
escritas na linguagem de programação Java, todos seus códigos compilados são
armazenados em um único arquivo com sufixo APK. O Android permite aos
desenvolvedores escrever softwares na
linguagem Java através do SDK fornecido pela Google. SDK é a sigla de Software Development Kit, o Android SDK
inclui documentação, código e utilitários para que programadores consigam
desenvolver as suas aplicações de acordo com um padrão de desenvolvimento. Cada
aplicação Android roda em seu próprio processo, com sua própria instância da
máquina virtual.
JSON (JavaScript Object Notation) é um formato para troca de dados que
tem como sua maior característica a leveza, ou seja, é de fácil escrita e
leitura. O JSON é baseado em um subconjunto do JavaScript (Standard ECMA-262 3rd Edition - December 1999), completamente independente
de linguagem porém usando convenções familiares a programadores. Foi criado por
Douglas Crockford e é descrito no RFC 4627. Por suas características é
tipicamente usado em ambientes onde o tamanho do fluxo de dados entre o cliente
e o servidor é de importância relevante. “A simplicidade de JSON tem resultado
em seu uso difundido, especialmente como uma alternativa para XML em AJAX.” (Wikipédia, 2011)
Para o desenvolvimento dos aplicativos
foram utilizadas algumas ferramentas, dentre elas estão:
A IDE Eclipse,
plataforma de desenvolvimento aberta composta por frameworks e ferramentas para
construção, gerenciamento e implantação de softwares;
Android SDK e
AVD Manager, kit para desenvolvimento de software para o sistema operacional
Android;
ADT (Android Developer Tools) é um plugin para Eclipse que fornece um conjunto de
ferramentas que são integradas com a IDE Eclipse para ajuda no desenvolvimento
de aplicativos Android.
2. JSON e Servidor JSON
JSON é uma maneira simples baseada em
texto para armazenar e transmitir dados estruturados. É um formato de dados
compacto nativo do javascript. Usando uma sintaxe simples, podendo facilmente
armazenar qualquer coisa de um número único, através de palavras, matrizes e
objetos usando nada mais que uma sequência de texto simples. Também pode
aninhar arrays e objetos, permitindo
a criação de estruturas de dados complexas. O JSON é constituído de duas
estruturas, uma coleção de pares nome/valor, (Figura 1) e como
um array associativo e uma lista
ordenada de valores, (Figura
2).
Uma vez criada, a sequência de
dados é fácil enviá-lo para outro aplicativo ou computador, pois se trata de
apenas texto simples.
Vantagens do JSON:
- Formatação de dados compacta;
- Fácil para pessoas como dois hosts lerem e escreverem;
- Mapeia muito facilmente as estruturas de dados usadas por muitas linguagens de programação (números, sequências de caracteres, verdadeiro e falso, valores nulos, matrizes e matrizes associativas);
- A maioria das linguagens de programação contem bibliotecas ou funções que fazem a leitura e também a escrita de estruturas JSON.
O JSON é comumente usado em
aplicações para a Web, para o envio de dados de um computador servidor para o
navegador, normalmente usando Ajax para esta transferência, permitindo que os
dados de aplicativo web troquem mensagens entre o navegador e o servidor sem a
necessidade do recarregamento da página. Também há a possibilidade do envio
destes dados na forma inversa, ou seja, do navegador para o servidor desde que
a cadeia de caracteres no formato JSON esteja devidamente codificada com os
parâmetros GET ou POST.
A sintaxe e o tipo de dados
básicos para o JSON são os números (inteiros ou decimais), sequência de
caracteres (UTF-8 por padrão), booleano (verdadeiro ou falso), matriz
(sequência ordenado de valores separadas por vírgula entre colchetes), um
objeto (uma coleção não ordenada de chaves, pares de valores, separados por
pelo carácter ‘:’ a chave de seu valor os quais são separados dos demais por
vírgula e entre chaves as quais devem se sequência de caracteres distintas) e
para terminar os valores nulos. Alguns tipos da sintaxe, podemos ver no Exemplo
1.
Figura 2.
Estrutura de dados JSON – Lista ordenada de valores (array, vetor, lista ou sequência)
Exemplo 1. Simples exemplo da estrutura do formato de escrita em JSON
{
"CodigoVenda":
389,
"NomeVendedor":
"José da Silva,
"itensVenda":
[
{
"CodigoProduto":
55,
"NomeProduto":
"Chinelo Preto",
"ValorUnitário":
"29,99",
"Quantidade":
1},
{
"CodigoProduto":
12,
"NomeProduto":
"Camisa Polo",
"ValorUnitário":
"53,99",
"Quantidade":
2}
],
"VendaConfirmada":
true
}
|
2.1. JSON e PHP
O pacote do JSON está disponível no PHP a partir da
versão 5.2.0, ela foi empacotada e compilada junto com o PHP por padrão ou
através do PECL. PECL é um repositório de extensões PHP que fornece um
diretório de todas as extensões conhecidas. Ou seja, o suporte a JSON no PHP é
nativa, não sendo necessário sua a instalação ou ativação a partir da versão
5.2.0.
Para escrevermos uma representação de dados em JSON,
há a função json_enconde, que retorna
uma string contendo a representação
do valor no formato JSON.
Para lermos uma representação de dados JSON, é usada
a função json_decode, a qual pega uma
string codificada JSON e converte-a
em uma variável PHP.
A estrutura JSON e um array PHP associativo são extremamente semelhantes, ambos
representam os mesmos tipos de dados da mesma maneira, e ambos têm uma sintaxe
específica para fazê-lo. Portanto, para criar um objeto JSON no PHP, você pode
simplesmente criar um array associativo.
Exemplo 2: PHP no lado servidor que faz a sincronização dos dados.
<?php
$json = file_get_contents('php://input');
$data = json_decode($json);
foreach ($data as $id =>
$jsons) {
mysql_query("insert into
tabela values(".$jsons->id.",'".$jsons->title."')");
}
?>
|
2.2. JSON e Android
O JDK Android inclui em suas bibliotecas o suporte
para JSON através do pacote org.json.
A criação de um JSON a partir de um objeto Java
(POJO) consiste na manipulação da classe org.json.JSONObject e
org.json.JSONArray que são as classes principais da API de JSON. Nota-se que
respectivamente elas representam as duas estruturas de dados JSON, (Figura 1 e
Figura 2).
A classe JSONObject é uma coleção ordenada de pares
nome/valor. Sua forma é uma cadeia envolta em chaves com vírgulas entre os
nomes e valores, e vírgulas entre os valores e nomes. A forma interna é um
objeto ter se e optar por métodos para acessar os valores por nome, e colocar
métodos para adição ou substituição de valores pelo nome. Os valores podem ser
qualquer um destes tipos: Boolean, JSONArray, JSONObject, Number, String, ou o
objeto JSONObject.NULL. Um construtor JSONObject pode ser usado para converter
um externo forma de texto JSON em uma forma interna, cujos valores podem ser
recuperados com o get, ou para
converter valores em um texto JSON usando o put.
Um método get retorna um valor se foi
encontrado, e lança uma exceção se não for encontrado. Um método opt retorna um valor padrão ao invés de
lançar uma exceção, e por isso é útil para obtenção de valores opcionais.
A classe JSONArray é uma sequência ordenada de
valores. Sua forma de texto é uma cadeia envolta em colchetes com vírgulas
separando os valores. A forma interna é um objeto, tendo que acessar os valores
pelo índice, e aplicar os métodos para adição ou substituição de valores. Os
valores podem ser qualquer um destes tipos: Boolean, JSONArray, JSONObject,
Number, String, ou o objeto JSONObject.NULL.
Exemplo 3. Uso do JSON no Java.
jsonarray = new JSONArray();
json = new JSONObject();
json.put("id", "1");
json.put("title", "Exemplo");
jsonarray.put(json);
StringEntity se = new StringEntity(jsonarray.toString());
|
3. Aplicativo Android
O aplicativo proposto é um tomador de notas
multimídia. Basicamente o projeto consiste em um aplicativo para dispositivos
móveis o qual o usuário poderá lançar notas de memória nos tipos texto, foto e
áudio cada qual contendo a geo-localização momentânea ao seu lançamento. O
aplicativo terá uma tela de consulta das notas e sua reprodução assim como
funções para a sincronização das notas em um servidor JSON.
Um aplicativo Android pode ser observado como uma
série de componentes lógicos que interagem entre si em tempo de execução. De
forma simplificada, os principais componentes são: Atividades (Activity), Interface gráfica (View), Intents e bibliotecas, classes utilitárias, lógica de negócios,
código de banco de dados, código de comunicação com o servidor, etc..
Activity representa todo o código associado a uma tela do
aplicativo. Só há uma atividade por tela, e só uma tela por atividade. Cada
tela pode contém diversos componentes visuais (views). A Activity contém
o código que monta a tela (insere a view
principal) e que lida com os eventos. Uma aplicação consiste geralmente de
múltiplas activities que estão levemente
agrupadas umas as outras. Normalmente, uma activity
em um aplicativo é especificada como a atividade "principal", que é
apresentada ao usuário ao iniciar o aplicativo pela primeira vez. Cada
atividade pode, em seguida, iniciar outra atividade, a fim de executar ações
diferentes. Toda Activity deve ser
declarada explicitamente no arquivo geral de configuração do aplicativo
(AndroidManifest.xml).
Toda activity
possui um ciclo de vida (Figura 3), pois em dispositivos móveis como celular, o
usuário pode receber uma ligação a qualquer momento e a aplicação terá que
tratar o evento garantindo o seu funcionamento. Para isso cada activity possui
uma máquina de estados que permitem ao desenvolvedor controlar a aplicação
através de métodos como: onCreate(), onStart(), onRestart(), onResume(),
onPause(), onStop() e o onDestroy(). “Entender o ciclo de vida de uma Activity
Android é muito importante para garantir a criação de uma aplicação robusta.” (José, 2011)
Figura 3. Ciclo
de vida de uma Activity
A função onCreate() é
responsável pelo carregamento dos parâmetros da tela assim como outras
operações na inicialização da activity. É a primeira função executada
quando uma activity é chamada, somente sendo executada uma única vez.
A função onStart() é
executada logo após a onCreate(), esta sempre será executada quando o foco da
aplicação voltar de um estado de espera para a activity.
A função onResume() é bem
semelhante a função onStart(), sempre será executada na inicialização a na
volta de um estado de espera, porém é chamada sempre na volta do estado de
espera enquanto a função onStart() é executada quando a activity não
esta mais visível na tela.
A função onPause() é a
primeira a ser executada quando uma activity que estava em foco sai de
seu estado e outra toma o foco, porém esta activity pode não ter saído
se sua visualização ainda.
A função onStop() é
executada quando a activity que estava em onPause() sai da visualização
de tela ficando esta activity completamente encoberta por outra.
A função onDestroy() é a última
a ser executada dentro do ciclo de vida da activity determinando o fim
de vida da activity, ou seja, destruindo o objeto.
A função onRestart() é
chamada quando uma activity que estava sem visualização retoma o foco.
Esta função é sempre chamada antes da função onStart().
View pode ser definida em arquivos XML (definição
declarativa), em código Java (definição programática) ou em ambos. Apesar da
interface definida via código Java ser mais flexível, via XML é mais fácil de
dar manutenção e melhor para separar o que é código do que é design da
interface. Algumas views, chamadas de
Layouts, podem conter outras views e
funcionam como organizadoras das views
filhas.
Intents são classes que representam a intenção de se fazer
algo. É a forma de um aplicativo chamar outro ou de uma tela do aplicativo
chamar outra tela. Pode ser explícito (execute a atividade da classe X) ou pode
ser indireto (execute uma atividade que saiba mostrar arquivos PDF).
As bibliotecas, classes utilitárias, lógica de
negócios, código de banco de dados, código de comunicação com o servidor, podem
ser definidos em arquivos Java ou em pacotes JAR. Geralmente são usados como
suporte pelas Activities.
A aplicação tomadora de notas multimídia tem o
seguinte escopo:
MainActivity: tela inicial usando um TableLayout contento 4 botões, sendo eles, criar nota de texto,
criar nota com foto, criar nota de áudio e ver todas as notas. Cada um abrindo
sua respectiva activity. Conta também
com menu de opções para entrada na tela de configuração (SetupActivity).
NewNotesActivity: tela para criação de notas de texto usando TableLayout contento um textview onde aparecerá a
geo-localização, um campo para texto para o título da nota, um campo texto para
a nota, 2 botões, sendo eles: salvar nota criada e cancelar. Para o botão
salvar a nota a ação será de salvar e destruir a activity, voltando para a activity
principal e para o botão cancelar a ação será de destruir a activity sem o salvamento automático da
nota voltando para a activity
principal.
NewPhotoActivity: tela para criação de notas com foto usando
TableLayout contento um textview onde
aparecerá a geo-localização, um campo texto para o título da nota, 1 botão para
tirar a foto e um ImageView para
visualizar a foto tirada. Além dos botões Salvar e Cancelar. Para o botão
salvar a nota a ação será de salvar e destruir a activity, voltando para a activity
principal e para o botão cancelar a ação será de destruir a activity sem o salvamento automático da
nota voltando para a activity
principal.
NewAudioActivity: tela para criação de notas com áudio usando TableLayout contento um textview onde aparecerá a geolocalização, um campo texto para o
título da nota, um visualizador de tempo de gravação e 3 botões sendo: Gravar,
Tocar e Parar, componente Sound
recorder privido com Android SDK 1.
Além dos botões Salvar e Cancelar. Para o botão salvar a nota a ação será de
salvar e destruir a activity,
voltando para a activity principal e
para o botão cancelar a ação será de destruir a activity sem o salvamento automático da nota voltando para a activity principal.
MyNotesActivity: tela que mostra a lista de notasarmazenadas
através de uma ListView. Cada item da
lista será um RelativeLayout com TextViews para título, subtítulo e data
além do tipo de nota (Texto, Áudio ou Foto). Quando clicadas as notas usam as
próprias activitys de criação para
sua visualização, porém com os campos desabilitados. Os itens em lista desta activity terão o título, data e hora e
uma imagem identificando qual seu tipo (texto, áudio ou foto). Nesta tela há o
menu de opções contento o itens para ativação da sincronização dos dados com o
servidor JSON.
SetupActivity: tela para configuração da aplicação onde é
armazenada as informações para conectividade com o servidor JSON e a opção de
auto sincronização, ou seja, caso ativada a opção, ao escrever a nota em banco
de dados o aplicativo conectará com o servidor JSON e enviará automaticamente a
nota inserida.
4. Conclusão
Trafegar dados é a maneira que podemos fazer para
que sistemas se comuniquem e transpareçam falar a mesma língua. A tecnologia
mais difundida para esta comunicação é o XML (Extensible Markup Language), que
através de seus padrões de leitura e escrita, podemos trafegar informações
entre aplicativos, os quais podem ser desenvolvidos em diferentes linguagens de
programação. Com o mesmo objetivo, a tecnologia JSON proporciona aos
desenvolvedores o trabalho com volume de dados com maior eficiência levando em
conta o tamanho do tráfego de dados e a simplicidade no tratamento das
informações, pois as API´s (Application Programming Interface) para JSON são
bem mais simples, no que se refere à utilização. O seu uso surge da necessidade
de trafegar o mínimo de informação em requisições AJAX. Comparativamente, um
arquivo de informações JSON tem menos bytes por não precisar usar as tags do formato XML.
A tendência do uso desta tecnologia vem aumentando
devido a grande troca de informações com crescente uso das redes sociais.
Aplicativos e utilitários que queiram compartilhar informações com estas redes
tendem a ser ágeis e suportar o formato para a troca de dados. Um exemplo é o
Twitter que utiliza a tecnologia para envio e recebimento das informações nele
armazenadas.
Visto que o JSON é um formato nativo do Javascript e
as versões mais recentes das principais linguagens de programação como Java,
PHP, ASP, já contêm bibliotecas para o tratamento do formato JSON, o
desenvolvimento de aplicações que utilizaram a funcionalidade de troca de
informações através de JSON é simples devido aos métodos e funções encapsuladas
na linguagem de programação.
5. Referências
[THE INTERNET SOCIETY 2006], “RFC
4627 application/json.”, http://dev.mysql.com/doc/refman/5.5/en/replication.html.
[JSON.org], “Introducing JSON”,
http://www.json.org.
[JOSÉ, P. 2011], “Entenda o ciclo de vida
de uma Activity Android.”, http://www.petherjose.com/2011/07/entenda-o-ciclo-de-vida-de-uma-activity-android/
[WIKIPÉDIA 2011], “JSON.”, http://pt.wikipedia.org/wiki/JSON
Abstract. The simplicity of using JSON has resulted in wide spread of its use in applications requiring data exchanges quickly and efficiently. This article aims to demonstrate the creation of an application for the Android platform and technology utilization JSON, covering writing, reading and sending data through the application and also the development of a server for storage of JSON data.
Resumo. A simplicidade do uso do JSON tem resultado na grande difusão de seu uso em aplicações que requerem trocas de dados de forma rápida e eficiente. Este artigo tem por objetivo demonstrar a criação de uma aplicação para plataforma Android e a utilização da tecnologia JSON, abordando escrita, leitura e o envio dos dados através do aplicativo e também o desenvolvimento de um servidor JSON para armazenamento destes dados.
Autor: Victor Hugo Manata
Pontes
Pós-graduação
em Redes e Aplicações Distribuídas – Universidade Católica de Minas Gerais
Campus de Poços de Caldas
Poços de Caldas – MG – Brasil
twitch.tv/lechuck311
Poços de Caldas – MG – Brasil
twitch.tv/lechuck311