Beruflich Dokumente
Kultur Dokumente
Laboratrio
Aderindo a servios REST com
Xamarin.Forms
Verso: 1.0.0
Dezembro de 2016
CONTEDO
INTRODUO
RESUMO
Introduo
Integrar um servio Web dentro de uma aplicao um cenrio comum. Neste laboratrio, ser
demonstrada a forma de consumir um servio Web RESTful a partir de uma aplicao
Xamarin.Forms. A aplicao Xamarin.Forms ser desenvolvida para implementar o padro MVVM.
Objetivos
Ao finalizar este laboratrio, os participantes sero capazes de:
Requisitos
Para a realizao deste laboratrio necessrio contar com o seguinte:
Uma equipe de desenvolvimento com sistema operativo Windows 10 e Visual Studio 2015
Community, Professional ou Enterprise com a plataforma Xamarin.
Uma equipe Mac com a plataforma Xamarin.
Uma conexo Internet.
Nesta tarefa ser criada uma aplicao Xamarin.Forms utilizando Microsoft Visual Studio e o modelo
Blank App (Xamarin.Forms Portable).
4. Fornea Cats como nome da soluo. Fornea tambm a localizao onde deseja criar a
soluo e clique em OK para cri-la.
5. Clique no boto OK do quadro de dilogo New Universal Windows Project para aceitar as
verses sugeridas para a aplicao UWP que ser criada.
6. Depois que a soluo com seus projetos for criada, selecione a opo Manage NuGet
Packages for Solution no menu de contexto do nome da soluo.
Visual Studio pode indicar que existem atualizaes para o pacote NuGet
Xamarin.Forms e todas suas unidades, porm, Xamarin.Forms est configurado
para dependncias de verses especficas. Portanto, embora o Visual Studio te
indique que existem novas verses disponveis de pacotes
Xamarin.Android.Support, Xamarin.Forms no necessariamente compatvel
com essas novas verses.
provvel que voc ser solicitado para aceitar as alteraes e reiniciar o Visual Studio para
concluir a instalao.
A aplicao obter do servio REST os dados das raas de gatos mais caras do mundo. Nesta tarefa
voc criar a classe modelo que te permitir armazenar os dados de uma raa de gato.
2. Dentro do diretrio Models acrescente a classe Cat com as seguintes propriedades pblicas:
3. Dentro do diretrio Models acrescente uma nova classe pblica chamada Repository. Esta
classe conter a lgica de acesso aos dados da aplicao.
Note que o mtodo est definido para executar-se de forma assncrona e que os dados so
obtidos a partir do servio http://demos.ticapacitacion.com/cats utilizando a classe
HttpClient. Os dados JSON obtidos so deserializados utilizando o mtodo DeserializeObject
do objeto JsonConvert.
Nesta tarefa voc criar o ViewModel pela classe CatsViewModel. Esta classe proporcionar toda a
funcionalidade que necessita a Vista Xamarin.Forms principal da aplicao para mostrar os dados das
raas de gatos. O ViewModel conter a lista de objetos Cat e um mtodo que poder ser invocado
para obter a lista de objetos Cat do repositrio. Tambm conter uma propriedade booleana que
indicar se estamos obtendo os dados em uma tarefa de fundo (Background Task).
using System.ComponentModel;
7. O seguinte passo criar uma propriedade que permita a vista determinar se o ViewModel se
encontra ocupado. Desta forma poderemos evitar realizar operaes duplicadas, como por
exemplo quando o usurio atualiza os dados mltiplas vezes.
Adicione o seguinte cdigo para criar o campo de respaldo da propriedade.
9. Adicione o seguinte cdigo para definir uma propriedade Cats que armazenar a lista de
objetos Cat.
Note que estamos utilizando ObservableCollection pois esta classe tem suporte para eventos
CollectionChanged que ocorrem quando agregamos ou eliminamos elementos da coleo.
Isto muito til j que no temos que invocar ao mtodo OnPropertyChanged por cada
mudana nos elementos da coleo.
10. Agrega o seguinte cdigo ao incio do arquivo para importar o espao de nomes das classes
modelo da aplicao e da classe ObservableCollection.
using System.Collections.ObjectModel;
using Cats.Models;
11. Adicione o seguinte cdigo para definir o construtor do ViewModel. O cdigo inicializar a
propriedade Cats.
public CatsViewModel()
{
Cats = new ObservableCollection<Models.Cat>();
}
12. Adicione o seguinte cdigo para definir um mtodo assncrono chamado GetCats que obter
os dados das raas de gatos a partir do repositrio.
13. Dentro do mtodo GetCats adicione o seguinte cdigo que permitir detectar se atualmente
o ViewModel se encontra ocupado obtendo os dados.
if(!IsBusy)
{
}
return;
Note que estamos estabelecendo IsBusy a true e posteriormente a false quando iniciamos a
recuperao da informao a partir do repositrio e quando terminamos de obter os dados.
15. Adicione o seguinte cdigo dentro do bloco try para obter os dados do repositrio.
try
{
IsBusy = true;
var Repository = new Repository();
var Items = await Repository.GetCats();
}
16. Dentro do bloco try, debaixo do cdigo anterior, adicione o seguinte cdigo para limpar a
lista atual de objetos Cat e carreg-los a partir da coleo Items.
Cats.Clear();
foreach(var Cat in Items)
{
Cats.Add(Cat);
}
Se algo der errado, o bloco catch guardar a exceo e depois do bloco finally poderemos
mostrar uma mensagem emergente.
17. Adicione o seguinte cdigo logo aps do bloco finally para mostrar uma mensagem em caso
de que se tenha gerado uma exceo.
if (Error != null)
{
await Xamarin.Forms.Application.Current.MainPage.DisplayAlert(
"Error!", Error.Message, "OK");
}
O mtodo principal do ViewModel para obter os dados ter sido completado. Ao invs de invocar o
mtodo diretamente, o exporemos com um Command. Um objeto Command tem uma interface que
sabe qual mtodo invocar e tem uma forma opcional de descrever se o Command est habilitado.
18. Adicione o seguinte cdigo classe CatsViewModel para criar um novo comando chamado
GetCatsCommand.
19. Adicione o seguinte cdigo ao incio do arquivo para importar o espao de nomes da classe
Command.
using Xamarin.Forms;
A nica modificao que teremos que fazer para o caso em que o valor da propriedade
IsBusy mude. Neste caso, teremos que reavaliar a funo que determina se o comando est
habilitado.
21. Adicione o seguinte cdigo ao final do bloco set da propriedade IsBusy para invocar o
mtodo ChangeCanExecute do comando GetCatsCommand. Ao executar o mtodo
ChangeCanExecute, a funo que determina se o comando est habilitado ser reavaliada.
GetCatsCommand.ChangeCanExecute();
2. Dentro do diretrio Views adicione um novo elemento Forms Xaml Page chamado
CatsPage.xaml.
Para esta pgina adicionaremos controles alinhados verticalmente. Podemos utilizar um
controle StackLayout para fazer isso.
3. Substitua o elemento Label dentro de ContentPage pelo seguinte cdigo.
<StackLayout Spacing="0">
</StackLayout>
Este ser o contentor de onde todos os controles child sero colocados. Note que
especificamos que os controles child no tero espao entre eles.
4. Adicione o seguinte cdigo para criar um boto com uma ligaes ao comando
GetCatsCommand do ViewModel. O comando toma o lugar de um manipulador do evento
Clicked e ser executado quando o usurio tocar o boto.
Utilizaremos um ListView que se vincule coleo Cats para mostrar todos os elementos.
Podemos utilizar uma propriedade especial chamada x.Name= para nomear qualquer
controle.
6. Adicione o seguinte cdigo para definir o elemento ListView.
</ListView>
<ListView.ItemTemplate>
<DataTemplate>
<ImageCell Text="{Binding Name}"
Detail="{Binding Price, StringFormat='{0:c} dlares'}"
ImageSource="{Binding Image}"/>
</DataTemplate>
</ListView.ItemTemplate>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Cats.Views.CatsPage"
xmlns:VM="clr-namespace:Cats.ViewModels"
Title="Cats">
9. Finalmente, adicione o seguinte cdigo XAML para definir o contexto de ligao especificado
nas propriedades dos controles agregados pgina.
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Cats.Views.CatsPage"
xmlns:VM="clr-namespace:Cats.ViewModels"
Title="Cats">
<ContentPage.BindingContext>
<VM:CatsViewModel/>
</ContentPage.BindingContext>
public App()
{
// The root page of your application
var content = new Views.CatsPage();
Este cdigo o ponto de entrada da aplicao. O cdigo simplesmente cria uma instncia de
CatsPage e a envolve em uma pgina de navegao para que seja mostrada ao usurio.
3. Selecione o projeto Android como projeto de incio.
4. Execute a aplicao no emulador de sua preferncia. Ser exibida uma tela similar seguinte:
Depois de carregar os dados a partir do servio Web, ser mostrada uma tela similar
seguinte.
Agora o momento para fazer alguma navegao e mostrar alguns detalhes dos dados.
1. Dentro do diretrio Views adicione um novo elemento Forms Xaml Page chamado
DetailsPage.xaml. Esta pgina permitir mostrar o detalhe de um elemento da lista
selecionado pelo usurio.
Tal como acontece com a pgina CatsPage, utilizaremos um StackLayout mas iremos coloc-
lo dentro de um ScrollView se houver muito texto a ser apresentado.
<ScrollView Padding="10">
<StackLayout Spacing="10">
</StackLayout>
</ScrollView>
3. Dentro de StackLayout adicione agora o seguinte cdigo para definir controles e ligaes
para as propriedades do objeto Cat.
4. Adicione o seguinte cdigo para permitir ao usurio navegar no site Web do elemento
selecionado.
5. Salve as alteraes.
6. Abra o arquivo code-behind de DetailsPage.xaml chamado DetailsPage.xaml.cs.
7. Modifique o construtor da classe para que aceite como parmetro um objeto Cat que
representa o objeto selecionado pelo usurio.
8. Adicione o seguinte cdigo dentro da classe para declarar uma varivel que armazene os
dados do objeto Cat selecionado.
Models.Cat SelectedCat;
Models.Cat SelectedCat;
public DetailsPage(Models.Cat selectedCat)
{
InitializeComponent();
this.SelectedCat = selectedCat;
BindingContext = this.SelectedCat;
}
ButtonWebSite.Clicked += ButtonWebSite_Clicked;
11. Adicione o seguinte cdigo para implementar o manipulador do evento Clicked utilizando a
classe Device para invocar o mtodo OpenUri.
private void ButtonWebSite_Clicked(object sender, EventArgs e)
{
if (SelectedCat.WebSite.StartsWith("http"))
{
Device.OpenUri(new Uri(SelectedCat.WebSite));
}
}
public CatsPage()
{
InitializeComponent();
ListViewCats.ItemSelected += ListViewCats_ItemSelected;
}
14. Adicione o seguinte cdigo para implementar o manipulador do evento que permita navegar
na pgina DetailsPage.
private async void ListViewCats_ItemSelected(object sender,
SelectedItemChangedEventArgs e)
{
18. Toque o boto Ir ao Site Web. Ser mostrada a pgina Web solicitada.
20. Teste a aplicao nas demais plataformas. A seguinte imagem mostra a aplicao
executando-se no emulador de iOS.
Resumen
Neste laboratrio voc desenvolveu uma aplicao Xamarin.Forms implementando o padro MVVM.
No laboratrio seguinte voc modificar o repositrio de dados para consumir os dados a partir de
uma aplicao backend hospedada em um Azure App Service do Microsoft Azure.
Quando tiver finalizado este laboratrio publique a seguinte mensagem no Twitter e Facebook: