Xamarin.Forms - Conversor de Moedas acessando um serviço REST - I


Neste artigo vou mostrar criar um programa que realiza o câmbio entre as principais moedas existentes. Para isso vamos usar um serviço REST que oferece a cotação das moedas.

Esse é um artigo prático que mostra como usar alguns recursos do Xamarin.Forms para criar uma aplicação de câmbio de moedas que acessa um serviço na web.

Nota: Esta aplicação foi baseada e adaptada a partir da original obtida em : https://www.youtube.com/watch?v=PXIrjjrTmDA

O objetivo da aplicação é realizar o câmbio entre duas moedas selecionados pelo usuário, acessar um serviço na web que fornece a cotação das moedas para calcular o cãmbio.

Nesta aplicação vamos aprender a fazer o seguinte:

  • Acessar um serviço da web e obter informações;

  • Serializar e deserializar dados remotos no formato JSON;

  • Usar a view Picker para selecionar um item;

  • Usar o ActivityIndicator para indicar uma operação em execução;

Abaixo vemos o fluxo de funcionamento da aplicação:

1 - A página principal onde temos exibida a mensagem de que as taxas de conversão foram carregadas;
2 - A seguir o usuário informa o valor e seleciona a moeda de origem;
3 - Depois seleciona a moeda de destino;
4 - Para realizar a conversão basta clicar no botão Converter;

A url a partir de onde vamos acessar o serviço esta definida neste linkk: https://openexchangerates.org/.  Eu vou usar o serviço grátis para testar a API. Para uma aplicação de produção sugiro que consulte como assinar o serviço.

O caminho completo para obter as cotações das moedas é dado por: https://openexchangerates.org/api/latest.json?app_id=f490efbcd52d48ee98fd62cf33c47b9e

Se você digitar essa url no seu navegador e informar o nome de um ator vai obter o seguinte resultado:

Ai temos as informações incluindo as taxas de conversões entre as moedas que vamos usar em nossa aplicação. Perceba que temos as informações informações :

  • disclaimer

  • licencse

  • timestamp

  • base

  • rates

Vamos usar basicamente o valor das taxas para realizar a conversão entre as moedas.

Você pode obter o símbolo, o nome e outros detalhes sobre as moedas nestes links : http://www.xe.com/symbols.php , http://www.xe.com/iso4217.php

Então vamos à prática.

Criando um projeto no VS 2015 com Xamarin

Abra o Visual Studio Community 2015 e clique em New Project;

Selecione Visual C#, o template Cross Plataform e a seguir Blank App (Xamarin.Forms Portable);

NotaA opção Portable (Portable Class Library - PCL ) - Inclui todo o código comum em uma biblioteca de vínculo dinâmico (DLL) que pode então ser referenciada a partir de outros projetos;

Informe o nome XF_Moedas e clique no botão OK;

Ao clicar no botão OK, será criada uma solução contendo 4 projetos. (Dependendo do seu ambiente pode haver alguma variação nos projetos.)

O projeto comum possui a classe App.cs que irá conter o código compartilhado e que vamos usar neste artigo.

Incluindo as referências aos pacotes Json e HttpClient

Vamos incluir no projeto (em todos eles) as referências às bibliotecas NewtonSoft.Json e Microsoft.Net.Http para dar suporte a serialização dos dados no formato JSON e para realizar o acesso ao serviço RESTFull pela nossa aplicação.

No menu Tools clique em Nuget Package Manager e a seguir em Manage Nuget Packages for Solution;

Selecione os pacotes conforme mostrado abaixo (um por vez), 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 as classes de domínio da aplicação

Vamos criar duas classes para representar as informações do nosso domínio que são as informações sobre as moedas que vamos usar na aplicação.

Vamos criar uma nova pasta no projeto compartilhado com o nome Models via menu Project -> Add New Folder.

A seguir clique com o botão direito do mouse sobre a pasta Models e clique em Add Class e informe o nome ExchangeRates.cs e a seguir inclua o código abaixo nesta classe:

 public class ExchangeRates
    {
        public string disclaimer { get; set; }
        public string license { get; set; }
        public int timestamp { get; set; }
        public string @base { get; set; }
        public Rates rates { get; set; }
    }

 

Repita o procedimento acima e crie a classe Rates com o seguinte código :

   public class Rates
    {
        public double AED { get; set; }
        public double AFN { get; set; }
        public double ALL { get; set; }
        public double AMD { get; set; }
        public double ANG { get; set; }
        public double AOA { get; set; }
        public double ARS { get; set; }
        public double AUD { get; set; }
        public double AWG { get; set; }
        public double AZN { get; set; }
        public double BAM { get; set; }
        public double BBD { get; set; }
        public double BDT { get; set; }
        public double BGN { get; set; }
        public double BHD { get; set; }
        public double BIF { get; set; }
        public double BMD { get; set; }
        public double BND { get; set; }
        public double BOB { get; set; }
        public double BRL { get; set; }
        public double BSD { get; set; }
        public double BTC { get; set; }
        public double BTN { get; set; }
        public double BWP { get; set; }
        public double BYN { get; set; }
        public double BYR { get; set; }
        public double BZD { get; set; }
        public double CAD { get; set; }
        public double CDF { get; set; }
        public double CHF { get; set; }
        public double CLF { get; set; }
        public double CLP { get; set; }
        public double CNY { get; set; }
        public double COP { get; set; }
        public double CRC { get; set; }
        public double CUC { get; set; }
        public double CUP { get; set; }
        public double CVE { get; set; }
        public double CZK { get; set; }
        public double DJF { get; set; }
        public double DKK { get; set; }
        public double DOP { get; set; }
        public double DZD { get; set; }
        public double EEK { get; set; }
        public double EGP { get; set; }
        public double ERN { get; set; }
        public double ETB { get; set; }
        public double EUR { get; set; }
        public double FJD { get; set; }
        public double FKP { get; set; }
        public double GBP { get; set; }
        public double GEL { get; set; }
        public double GGP { get; set; }
        public double GHS { get; set; }
        public double GIP { get; set; }
        public double GMD { get; set; }
        public double GNF { get; set; }
        public double GTQ { get; set; }
        public double GYD { get; set; }
        public double HKD { get; set; }
        public double HNL { get; set; }
        public double HRK { get; set; }
        public double HTG { get; set; }
        public double HUF { get; set; }
        public double IDR { get; set; }
        public double ILS { get; set; }
        public double IMP { get; set; }
        public double INR { get; set; }
        public double IQD { get; set; }
        public double IRR { get; set; }
        public double ISK { get; set; }
        public double JEP { get; set; }
        public double JMD { get; set; }
        public double JOD { get; set; }
        public double JPY { get; set; }
        public double KES { get; set; }
        public double KGS { get; set; }
        public double KHR { get; set; }
        public double KMF { get; set; }
        public double KPW { get; set; }
        public double KRW { get; set; }
        public double KWD { get; set; }
        public double KYD { get; set; }
        public double KZT { get; set; }
        public double LAK { get; set; }
        public double LBP { get; set; }
        public double LKR { get; set; }
        public double LRD { get; set; }
        public double LSL { get; set; }
        public double LTL { get; set; }
        public double LVL { get; set; }
        public double LYD { get; set; }
        public double MAD { get; set; }
        public double MDL { get; set; }
        public double MGA { get; set; }
        public double MKD { get; set; }
        public double MMK { get; set; }
        public double MNT { get; set; }
        public double MOP { get; set; }
        public double MRO { get; set; }
        public double MTL { get; set; }
        public double MUR { get; set; }
        public double MVR { get; set; }
        public double MWK { get; set; }
        public double MXN { get; set; }
        public double MYR { get; set; }
        public double MZN { get; set; }
        public double NAD { get; set; }
        public double NGN { get; set; }
        public double NIO { get; set; }
        public double NOK { get; set; }
        public double NPR { get; set; }
        public double NZD { get; set; }
        public double OMR { get; set; }
        public double PAB { get; set; }
        public double PEN { get; set; }
        public double PGK { get; set; }
        public double PHP { get; set; }
        public double PKR { get; set; }
        public double PLN { get; set; }
        public double PYG { get; set; }
        public double QAR { get; set; }
        public double RON { get; set; }
        public double RSD { get; set; }
        public double RUB { get; set; }
        public double RWF { get; set; }
        public double SAR { get; set; }
        public double SBD { get; set; }
        public double SCR { get; set; }
        public double SDG { get; set; }
        public double SEK { get; set; }
        public double SGD { get; set; }
        public double SHP { get; set; }
        public double SLL { get; set; }
        public double SOS { get; set; }
        public double SRD { get; set; }
        public double STD { get; set; }
        public double SVC { get; set; }
        public double SYP { get; set; }
        public double SZL { get; set; }
        public double THB { get; set; }
        public double TJS { get; set; }
        public double TMT { get; set; }
        public double TND { get; set; }
        public double TOP { get; set; }
        public double TRY { get; set; }
        public double TTD { get; set; }
        public double TWD { get; set; }
        public double TZS { get; set; }
        public double UAH { get; set; }
        public double UGX { get; set; }
        public double USD { get; set; }
        public double UYU { get; set; }
        public double UZS { get; set; }
        public double VEF { get; set; }
        public double VND { get; set; }
        public double VUV { get; set; }
        public double WST { get; set; }
        public double XAF { get; set; }
        public double XAG { get; set; }
        public double XAU { get; set; }
        public double XCD { get; set; }
        public double XDR { get; set; }
        public double XOF { get; set; }
        public double XPD { get; set; }
        public double XPF { get; set; }
        public double XPT { get; set; }
        public double YER { get; set; }
        public double ZAR { get; set; }
        public double ZMK { get; set; }
        public double ZMW { get; set; }
        public double ZWL { get; set; }
    }

Definindo a interface com o usuário : criando a página MoedasPage

Selecione o projeto Portable e no menu Project clique em Add New Item;

Clique em Cross Platform e selecione Forms Xaml Page informando o nome MoedasPage e clicanco em Add;

A seguir selecione o código 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"
             x:Class="XF_Moedas.Views.MoedasPage">
    <ScrollView>
        <StackLayout Spacing="10">
            <Frame>
                 <Label Text="Câmbio" FontSize="30" FontAttributes="Bold" HorizontalOptions="Center" VerticalOptions="Center"/>
            </Frame>
            <Label Text="Informe o valor, selecione a moeda de origem e de destino e clique em  'Converter'"
             HorizontalOptions="Start"
             VerticalOptions="Center"/>
            <Entry x:Name="Valor" Placeholder="Informe o valor" Keyboard="Numeric" BackgroundColor="Aqua" HorizontalOptions="FillAndExpand" VerticalOptions="Center"/>
            <Label Text="Selecione a moeda de origem:" HorizontalOptions="Start" VerticalOptions="Center"/>
            <Picker x:Name="moedaOrigemPick"  HorizontalOptions="FillAndExpand"  VerticalOptions="Center"/>
            <Label Text="Selecione moeda destino:" HorizontalOptions="Start" VerticalOptions="Center"/>
            <Picker x:Name="moedaDestinoPick" HorizontalOptions="FillAndExpand"  VerticalOptions="Center"/>
            <Button x:Name="btnConverter" IsEnabled="False" Text="Converter" BackgroundColor="Purple" TextColor="White"
              HorizontalOptions="FillAndExpand"  VerticalOptions="Center" Clicked="btnConverter_Clicked"/>
            <ActivityIndicator x:Name="waitActivityIndicator"
                         IsRunning="False"
                         HorizontalOptions="Center"
                         VerticalOptions="Center"/>

            <Label x:Name="lblmsg" Text="Nenhuma conversão realizada" BackgroundColor="Yellow"
             TextColor="Black" FontSize="20" HorizontalTextAlignment="Center" AbsoluteLayout.VerticalTextAlignment="Center"
             HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"/>
        </StackLayout>
    </ScrollView>
</ContentPage>

O código é bem simples e cabe destacar apenas :

- A utilização da view Frame para destacar o título : Câmbio;

- A utilização da view Picker que iremos usar para selecionar uma moeda; (Você vai perceber que esta view não é nada amigável)

- O evento btnConverter_Clicked definido no Button para realizar a conversão entre as moedas escolhidas;

- A utilização do ActivityIndicator para indicar a operação de carga das taxas feita quando acessamos o serviço web;

Na segunda parte do artigo  vamos implementar o código que vai permiter acessar o serviço web, selecionar as moedas e realizar a conversão.

Na verdade, na verdade vos digo que quem ouve a minha palavra, e crê naquele que me enviou, tem a vida eterna, e não entrará em condenação, mas passou da morte para a vida.
João 5:24

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

     Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti