Desenvolvimento De Aplicativos Windows Phone: Comunicação com web-services via JSON
Introdução
Neste tutorial ensinaremos como fazer comunicação com serviços web utilizando uma API JSON. JSON é um formato utilizado para transferência de dados entre 2 máquinas, geralmente um cliente e um servidor. O arquivo de resposta é composto por um texto que contém diversas tuplas “tag”:”valor”, sendo que que o valor que uma tupla pode ser um outro conjunto de tuplas.
Para implementar essa comunicação no Windows Phone deve-se usar além da classe WebClient as classes JArray e JToken, que não fazem parte da API padrão do Windows Phone.
Pacotes NuGet
O método mais fácil de se adicionar novos recursos a um projeto Windows Phone é através do uso de pacotes NuGet. Para instalar um pacote NuGet em um projeto clique com o botão direito no projeto e selecione a opção “Manage NuGet Packages for solution” que abrirá a seguinte tela:
Basta buscar por Json.Net na caixa de busca e selecionar a opção de mesmo nome. Após a instalação deste pacote as classes necessárias para tratar arquivos JSON vão estar disponíveis para uso.
Tratando arquivos JSON
Agora que já possuímos os recursos necessários para o tratamento de arquivos JSON vamos separar em dois passos esse tratamento sendo eles: Comunicação com o servidor e Tratamento da resposta.
Comunicação com o servidor
A comunicação com o servidor será feita através da classe WebClient. Para isso devemos instanciar um WebClient, definir qual o método deverá ser chamado quando o arquivo de resposta for recebido, e chamar o método responsável pelo download assíncrono de uma URL dada. O trecho de código a seguir é responsável por essa comunicação com o servidor.
[sourcecode language=”csharp” wraplines=”false” collapse=”false”]
WebClient webClient = new WebClient();
webClient.DownloadStringCompleted +=
//Método que será chamado ao final do download.
webClient_DownloadStringConpleted;
webClient.DownloadStringAsync(new Uri("www.exemplo.com/places.json"));
[/sourcecode]
Como o comentário no código indica, webClient_DownloadStringCompleted é o método que será chamado ao final do download e será responsável pelo tratamento do mesmo.
Tratamento da resposta
Como dito acima, o método webClient_DownloadStringCompleted é responsável pelo tratamento dos dados recebidos, portanto é ele que deverá fazer a leitura do JSON recebido.
Para isso este método deve transformar o texto recebido em um array de itens e percorrer o mesmo item a item fazendo as operações necessárias, geralmente a conversão para um tipo nativo e a persistência em uma estrutura auxiliar. O código abaixo é um exemplo de como executar esta tarefa:
[sourcecode language=”csharp” wraplines=”false” collapse=”false”]
private void webClient_DownloadStringConpleted(object sender, DownloadStringCompletedEventArgs e)
{
if (!string.IsNullOrEmpty(e.Result))
{
JArray jsonArray = JArray.Parse(e.Result);
JToken jsonArray_Item = jsonArray.First;
while (jsonArray_Item != null)
{
Place _place = new Place();
_place.name = jsonArray_Item.Value<string>("name");
_place.description = jsonArray_Item.Value<string>("description");
_place.image_url = jsonArray_Item.Value<string>("image_url");
_place.phone = jsonArray_Item.Value<string>("phone");
_place.type = jsonArray_Item.Value<string>("type");
// Obs: Armazene o place para uso posterior
}
jsonArray_Item = jsonArray_Item.Next;
}
}
[/sourcecode]
Neste trecho de código podemos ver como o JArray é criado e percorrido, além de como os valores das variáveis são obtidos de um JToken.
A comunicação de um aplicativo com web-services junto com o uso de bancos de dados locais permite a criação de aplicativos que usem e armazenem dados atualizados no dispositivo móvel para consultas quando o dispositivo não possui uma conexão disponível.
Interessante.