.NET

17 jan, 2011

Windows Phone 7, indo além do hello world – Parte 03

Publicidade

Antes de iniciar a última parte desta série, gostaria de abrir este tópico desejando a todos um ótimo 2011.

Vale lembrar que o conteúdo do artigo está divido em três partes:

Todos prontos? Vamos lá!

Abra o projeto e verifique se sua “Solution Explorer” está desse jeito:

Se sua resposta foi NÃO, você acertou! Perceba que a pasta “Service References” ainda não existe no projeto e é ela que iremos criar agora. Será esse serviço que fará a ponte entre nossa aplicação Windows Phone 7 e nossa WCF.

Para adicionar o “Service References”, é só seguir os seguintes passos:

Clique com botão direito sobre o projeto e clique na opção “Add Service Reference”.


Depois de clicar em “Add Service Reference”, teremos a seguinte tela:

Antes de prosseguirmos, vamos à algumas informações úteis sobre essa tela:

  1. O botão “Discover” vai procurar serviços que estejam dentro da sua solução. Ao clicar nesse botão, os serviços aparecerão no campo “Address”.
  2. Clicando em “Go”, aparecerão de fato seus serviços na caixa “Services”.
  3. Expandindo o serviço selecionado, você poderá ver os métodos contidos nele através da caixa “Operations“.

Clicando em OK, nossa “Solution Explorer” ficará assim:

Pronto, agora temos uma interface de comunicação entre nossa aplicação Windows Phone 7 e o mundo exterior, através do nosso serviço. Clique com o botão direito sobre o MainPage.xaml e selecione a opção “View Code” ou simplesmente F7.

Como iremos implementar um número considerável de linhas, irei escrevendo e comentando cada bloco e no final disponibilizarei todo o projeto para que vocês possam implementar nos seus projetos, ok?

Antes de mais nada, vamos trazer o nosso serviço através do Namespace que nós demos anteriormente. Lembre-se de que estou usando meu projeto. Caso você tenha criado com nomes diferentes, fique atento para não colocar o nome errado nos arquivos ou nas chamadas.

using Zodiac.SR_Zodiac;

Criamos  um “enum” para representar os 12 signos do zodíaco, de modo que não precisaremos informar o número que representa o signo, e sim o nome.

public enum SIGNO
{
ARIES = 1,
TOURO = 2,
GEMEOS = 3,
CANCER = 4,
LEAO = 5,
VIRGEM = 6,
LIBRA = 7,
ESCORPIAO = 8,
SAGITARIO = 9,
CAPRICORNIO = 10,
AQUARIO = 11,
PEIXES = 12,
}

Criamos um método para alterar o título da tela de acordo com o signo escolhido.

        private void EscreveTitulo(SIGNO p_nValue)
{
switch (p_nValue)
{
case SIGNO.ARIES:
this.txtTituloPrevisao.Text = "Áries - Seu Horóscopo Hoje:";
break;
case SIGNO.TOURO:
this.txtTituloPrevisao.Text = "Touro - Seu Horóscopo Hoje:";
break;
case SIGNO.GEMEOS:
this.txtTituloPrevisao.Text = "Gêmeos - Seu Horóscopo Hoje:";
break;
case SIGNO.CANCER:
this.txtTituloPrevisao.Text = "Câncer - Seu Horóscopo Hoje:";
break;
case SIGNO.LEAO:
this.txtTituloPrevisao.Text = "Leão - Seu Horóscopo Hoje:";
break;
case SIGNO.VIRGEM:
this.txtTituloPrevisao.Text = "Virgem - Seu Horóscopo Hoje:";
break;
case SIGNO.LIBRA:
this.txtTituloPrevisao.Text = "Libra - Seu Horóscopo Hoje:";
break;
case SIGNO.ESCORPIAO:
this.txtTituloPrevisao.Text = "Escorpião - Seu Horóscopo Hoje:";
break;
case SIGNO.SAGITARIO:
this.txtTituloPrevisao.Text = "Sagitário - Seu Horóscopo Hoje:";
break;
case SIGNO.CAPRICORNIO:
this.txtTituloPrevisao.Text = "Capricórnio - Seu Horóscopo Hoje:";
break;
case SIGNO.AQUARIO:
this.txtTituloPrevisao.Text = "Aquário - Seu Horóscopo Hoje:";
break;
case SIGNO.PEIXES:
this.txtTituloPrevisao.Text = "Peixes - Seu Horóscopo Hoje:";
break;
default:
break;
}
}

Criamos um método chamado LoadService. Esse método irá disparar um evento criado por nós para que as informações desejadas sejam exibidas na tela do aparelho.

LoadService:

public void LoadService(SIGNO p_nValue)
{
try
{
ServiceZodiacClient zc = new ServiceZodiacClient();
zc.GetPrevisaoCompleted += new EventHandler<SR_Zodiac.GetPrevisaoCompletedEventArgs>(zc_GetPrevisaoCompleted);
zc.GetPrevisaoAsync((int)p_nValue);
this.EscreveTitulo(p_nValue);
}
catch (Exception ex)
{
throw ex;
}
}

Evento zc_GetPrevisaoCompleted:

void zc_GetPrevisaoCompleted(object sender, SR_Zodiac.GetPrevisaoCompletedEventArgs e)
{
try
{
int pos = -1;
String sTexto;

this.ContentGrid.Visibility = System.Windows.Visibility.Collapsed;
this.TextGrid.Visibility = System.Windows.Visibility.Visible;

sTexto = e.Result.ToString();
pos = sTexto.IndexOf("<a");

this.txtPrevisao.Text = sTexto.Substring(0, pos - 1);
}
catch (Exception ex)
{
this.txtPrevisao.Text = ex.Message;
}
}

E, no evento KeyDown de cada signo, chamaremos o método LoadService, passando como parâmetro o valor correspondente ao signo clicado.

private void iAries_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
try
{
this.LoadService(SIGNO.ARIES);
}
catch (Exception ex)
{
throw ex;
}
}

Explicando:

No método LoadService, criamos um objeto ServiceZodiacClient para poder fazer a comunicação com nosso serviço. Esse serviço trabalha com eventos, ou seja, é preciso que um evento seja disparado para que ele seja “ativado” e por isso escrevemos a linha “zc.GetPrevisaoCompleted += new EventHandler…”, estamos fazendo uma chamada do evento GetPrevisaoCompleted do nosso serviço.

No “zc.GetPrevisaoAsync”, estamos passando o valor do parâmetro esperado pelo serviço. Depois disso, nosso evento é disparado, e o resultado retornado é o texto vindo do xml recuperado, como vimos na parte 2 do artigo.

Na prática, nossa aplicação final funcionará assim:

Clicamos sobre o signo selecionado.

E obtemos o horóscopo do dia.

Bem, pessoal, aqui fecho essa série de artigos sobre Windows Phone 7. Os arquivos utilizados nessa série estão aqui.

Uma abraço a todos e até o próximo artigo.