![]() |
Neste artigo vou mostrar como criar e consumir uma Web API ASP .NET em uma aplicação Xamarin Forms usando o HttpCliente com o Visual Studio 2015 e a linguagem C#. |
Vamos concluir o nosso projeto, completando a segunda parte do artigo e definindo o código para incluir, alterar, excluir e selecionar produtos via acesso remoto à nossa web api que esta atendendo no endereço: http://macwebapi.somee.com/api/produtos/
Para tornar mais simples o projeto não estou usando o padrão MVVM, e, assim estou acessando diretamente a camada de serviço a partir das Views. Em um projeto mais robusto isso não é recomendado.
Também não estou implementando a interface INotifyPropertyChanged nem usando a coleção ObservableCollection que permitiria atualizar a view automaticamente após qualquer alteração dos dados.
Para fazer a atualização estou chamando o método AtualizaDados() que acessa a web api e retorna todos os produtos. Essa abordagem simplifica o projeto mas não é aconselhável ser usada em um projeto de produção.
Recursos usados:
Visual Studio Community 2015 ou Xamarin Studio
Nota: Baixe e use a versão Community 2015 do VS ela é grátis e é equivalente a versão Professional.
Definindo o código do arquivo code-behind MainPage.xaml.cs
Abrindo o arquivo MainPage.axml.cs vamos começar definindo os namespaces usados:
using System;
using System.Collections.Generic;
using System.Linq;
using Xamarin.Forms;
using XF_ConsumindoWebAPI.Models;
using XF_ConsumindoWebAPI.Service;
|
No início do arquivo vamos declarar duas variáveis:
que iremos usar e que precisam ser vísiveis em todo o arquivo:
DataService dataService; List<Produto> produtos; |
Código do construtor MainPage
No construtor da classe MainPage inclua o código abaixo onde criamos uma nova instância da classe DataService() e chamamos o método AtualizaDados();
public MainPage() { InitializeComponent(); dataService = new DataService(); AtualizaDados(); } |
Método AtualizaDados()
A seguir temos o código do método AtualizaDados():
async void AtualizaDados()
{
produtos = await dataService.GetProdutosAsync();
listaProdutos.ItemsSource = produtos.OrderBy(item => item.Nome).ToList();
}
|
Estamos obtendo os produtos a partir da nossa web api usando o método GetProdutosAsync() e exibindo o resultado no controle ListView usando sua propriedade ItemSource.
Assim quando a aplicação for iniciada ela vai exibir todos os produtos que definimos em nossa web api.
Código do evento Clicked do botão : Adicionar Produto
Para incluir um novo produto basta digitar as informações para Nome, Categoria e Preço de um produto e clicar no botão Adicionar Produto.
O evento Clicked possui o seguinte código:
private async void btnAdicionar_Clicked(object sender, EventArgs e) { if (Valida()) { Produto novoProduto = new Produto { Nome = txtNome.Text.Trim(), Categoria = txtCategoria.Text.Trim(), Preco = Convert.ToDecimal(txtPreco.Text) };
try |
Este código chama o método Valida() que irá verificar se as informações do produto foram informadas e, em caso positivo, retornar true.
A seguir criamos um novo produto e atribuimos os valores digitados.
Depois usamos o método AddProdutoAsync() da classe DataService passando o novo produto para ser incluído e atualizamos os dados do Listview.
Código do método Valida()
O código do método Valida() apenas retorna true se os dados foram informados e false caso contrário:
private bool Valida() { if( string.IsNullOrEmpty(txtNome.Text) && string.IsNullOrEmpty(txtCategoria.Text) && string.IsNullOrEmpty(txtPreco.Text)) { return false; } else { return true; } } |
Código da ação de contexto do Listview para atualizar um produto: OnAtualizar
Se você não sabe o que uma ação de contexto do ListView veja o meu artigo: Xamarin.Forms - Trabalhando com ListView - Macoratti
private async void OnAtualizar(object sender, EventArgs e) { if (Valida()) { try { var mi = ((MenuItem)sender); Produto produtoAtualizar = (Produto)mi.CommandParameter;
produtoAtualizar.Nome = txtNome.Text; await dataService.UpdateProdutoAsync(produtoAtualizar); LimpaProduto(); |
Para atualizar um produto você tem que selecionar o produto que deseja alterar no ListView para que os dados do produto sejam exibidos nas views Entry acima do ListView.
Após isso altere os dados e depois, no produto selecionado no ListView, mantenha o mouse pressionado por alguns segundos para que as ações de contexto sejam exibidas.
Clique então em Alterar para acionar o evento OnAtualizar() que vai usar o método UpdateProdutoAsync() para atualizar os dados do produto.
Código do evento ItemSelected do ListView
No evento ItemSelected do ListView temos o código que vai permitir obter os dados de um item selecionado e exibí-los nas views Entry da página:
private void listaProdutos_ItemSelected(object sender, SelectedItemChangedEventArgs e) { var produto = e.SelectedItem as Produto; txtNome.Text = produto.Nome; txtCategoria.Text = produto.Categoria; txtPreco.Text = produto.Preco.ToString(); } |
Código da ação de contexto do Listview para remover um produto: OnDeletar
Na ação de contexto do ListView definida no evento OnDeletar temos o código que irá remover o produto selecionado:
private async void OnDeletar(object sender, EventArgs e) { try { var mi = ((MenuItem)sender); Produto produtoDeletar = (Produto)mi.CommandParameter; await dataService.DeletaProdutoAsync(produtoDeletar); LimpaProduto(); AtualizaDados(); } catch (Exception ex) { await DisplayAlert("Erro", ex.Message, "OK"); } } |
Este código chama o método DeletaProdutoAsync() da classe DataService passando o produto selecionado para que ele seja removido via web api.
Executando o projeto iremos obter o seguinte resultado: (á esquerda você ve o projeto Xamarin e à direita a web api sendo atualizada)
Pegue o
projeto aqui :
XF_ConsumindoWebAPI.zip (sem as referências)
"Ora, o fim do
mandamento é o amor de um coração puro, e de uma boa consciência, e de uma fé
não fingida."
1 Timóteo 1-5
Referências:
https://developer.xamarin.com/api/type/Android.App.AlertDialog/
https://developer.android.com/reference/android/app/Activity.html
https://developer.xamarin.com/api/type/Android.Widget.ProgressBar/