Xamarin Forms - Consumindo JSON via WEB API
Neste artigo vou mostrar como acessar informações no formato JSON usando um serviço REST e como exibir informações de objetos aninhados usando o databinding. |
Esse é um artigo prático que mostra como usar alguns recursos do Xamarin.Forms para criar uma aplicação simples mas funcional e útil.
O objetivo da aplicação é acessar o endereço http://jsonplaceholder.typicode.com/users/ e exibir essas informações em um ListView na aplicação Xamarin Forms.
Nesta aplicação vamos aprender a fazer o seguinte:
Abaixo vemos as duas páginas da aplicação :
1 - A página principal onde acessamos o serviço REST e exibimos o nome e o email do usuário em um ListView;
A primeira coisa que vou definir será a url de acesso aos dados : http://jsonplaceholder.typicode.com/users/"
Se você digitar essa url no seu navegador e informar o nome de um ator vai obter o seguinte resultado:
Ai temos os dados no formato JSON.
Para gerar as classes para as informações acima acesse o site : http://json2csharp.com/ e digite a url na caixa de texto e clique no botão Generate.
Ao final você verá as classes geradas conforme abaixo. Vamos usar essas classess para definir o nosso modelo de domínio:
Vamos apenas alterar o nome da classe RootObject para User.
Isto posto vamos para a parte prática.
Nota: Em outro artigo eu mostrei uma outra abordagem para esse mesmo serviço onde implementei a aplicação Xamarin Forms para exibir os detalhes do usuário.
Criando um projeto no VS 2017 com Xamarin
Abra o VS 2017 Community e clique em New Project e a seguir escolha Cross Platform -> Mobile App (Xamarin.Forms) e informe o nome XF_JsonAPI;
A seguir selecione a Plataforma (eu marquei somente Android) e escolha a estratégia de compartilhamento que será .NET Standard.
Clique no botão OK.
Pronto, nosso projeto já esta criado.
Incluindo as referências ao pacote Newtonsoft.Json
Vamos incluir no projeto (em todos eles) a referência à biblioteca NewtonSoft.Json para dar suporte a serialização dos dados no formato JSON.
No menu Tools clique em Nuget Package Manager e a seguir em Manage Nuget Packages for Solution;
Selecione o pacote conforme mostrado abaixo, selecione instalar em todos os projetos e clique no botão Install.
Ao final teremos as referências incluídas em todos os projetos da nossa solução.
Criando a classe de domínio User
Vamos criar uma classe para representar as informações do nosso domínio que são as informações sobre os usuários que vamos usar na aplicação.
Vamos criar uma nova pasta no projeto compartilhado com o nome Model via menu Project -> Add New Folder.
A seguir clique com o botão direito do mouse sobre a pasta Model e clique em Add Class e informe o nome User.cs e a seguir inclua o código abaixo nesta classe:
Nota: Cole os dados que você obteve a partir do site http://json2csharp.com/
public class Geo { public string lat { get; set; } public string lng { get; set; } } public class Address public class Company public class User |
Definindo o código da MainPage para exibir os dados
Como queremos
apenas exibir os dados JSON obtidos a partir da url:
http://jsonplaceholder.typicode.com/users/
vamos definir o código na view MainPage.xaml.
Abra o arquivo MainPage.xaml e inclua o código abaixo:
<?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:XF_JsonAPI" x:Class="XF_JsonAPI.MainPage"> <ListView x:Name="lvUsers"> </ContentPage> |
Definimos apenas um ListView chamado lvUsers e um DataTemplate usando um TextCell para exibir o nome e email do usuário obtido.
Agora abra o arquivo code-behind MainPage.xaml.cs e inclua o código a seguir:
using Newtonsoft.Json; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Net.Http; using Xamarin.Forms; using XF_JsonAPI.Model; namespace XF_JsonAPI public MainPage() async override protected void OnAppearing() List<User> usuarios = JsonConvert.DeserializeObject<List<User>>(rescontent); _users = new ObservableCollection<User>(usuarios); |
Definimos o a URI onde temos o serviço REST : http://jsonplaceholder.typicode.com/users/
O método GetStringAsync envia uma requisição HTTP GET de forma assíncrona. A palavra chave await suspende a execução até que o método assíncrono termine e quando isso ocorrer ele retorna um HttpResponseMessage que contém um response HTTP.
Se o código do status no response for um código de sucesso, o corpo do response conterá a representação JSON dos usuários.
Chamamos então o método JsonConvert.DeserializeObject() pra deserializar as informações e obter assim uma coleção de objetos do tipo User.
Agora é só alegria...
Executando o projeto iremos obter:
Acessamos assim dados remotos no formato JSON em uma aplicação Xamarin Forms.
Pegue o código do projeto compartilhado aqui: XF_JsonAPI.zip
"Bem-aventurados os que guardam os seus
testemunhos, e que o buscam com todo o coração"
Salmos 119:2
Referências:
Xamarin Forms - Consumindo uma Web API e Agrupando
Xamarin Forms - Acessando dados via REST e ...
Xamarin Android - Consumindo serviços REST com .