Desenvolvimento De Aplicativos Windows Phone: Comunicação com web-services via JSON

On 10 de agosto de 2014 by Gustavo Quintão

json160

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:

Janela de seleção de pacotes.

Janela de seleção de pacotes.

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.

4 Responses to “Desenvolvimento De Aplicativos Windows Phone: Comunicação com web-services via JSON”

Trackbacks & Pings

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *