Curso Windows Phone – Classe WebClient para download de conteúdo da web no formato de dados binários ou strings

Olá a todos, tudo bom?

O Framework .Net disponibiliza uma classe chamada WebClient (Namespace System.Net) e, assim como ocorre em aplicativos para Desktop, Web, Windows Services, Console, etc, nos aplicativos para Windows Phone também é possível fazer uso dessa classe para realizar o download de conteúdos da web no formato de strings (geralmente conteúdo XML) ou mesmo dados binários, como por exemplo, arquivos de imagens.

No exemplo abaixo, estou utilizando a classe WebClient para fazer o download do texto XML correspondente ao RSS do meu Blog (http://www.eduardorizo.com.br/feed/). Repare que faço uso de dois eventos, sendo que o primeiro é invocado toda vez que a classe faz o download de uma parte do conteúdo, ou seja, fica sendo invocado continuamente até o final do download e o segundo, é invocado quando o download do conteúdo é concluído.

Veja o código abaixo em C#:


public partial class MainPage : PhoneApplicationPage
{
   WebClient wc = new WebClient();

   // Constructor
   public MainPage()
   {
      InitializeComponent();

      wc.DownloadProgressChanged +=
           new DownloadProgressChangedEventHandler(wc_DownloadProgressChanged);
      wc.DownloadStringCompleted +=
           new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);

      wc.DownloadStringAsync(new Uri("http://www.eduardorizo.com.br/feed/"), "ehrizo");
   }

   void wc_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
   {
      /*
      A comparação abaixo é feita para que a classe compute apenas o download
      de conteúdo realizado pela própria aplicação. Repare o nome do token "ehrizo"
      que também foi definido na chamada do método DownloadStringAsync
      */
      if (e.UserState == "ehrizo")
         ApplicationTitle.Text = e.BytesReceived.ToString() + " bytes recebidos";
   }

   void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
   {
      if (e.Error == null && !e.Cancelled)
         txtRSS.Text = e.Result;
   }
}

O resultado da execução do código pode ser visualizado na imagem abaixo.

Grande abraço,
Eduardo Henrique Rizo

[twitter-follow screen_name=’eduardorizo’ show_count=’yes’]

Post relacionado:

Curso Windows Phone – Tópicos

Marcado com: , , , , , , ,
16 comentários sobre “Curso Windows Phone – Classe WebClient para download de conteúdo da web no formato de dados binários ou strings
  1. Renan disse:

    Show professor

  2. Cleidson Rodrigues disse:

    Olá Eduardo, venho estudando desenvolmento de app para windows phone e seu blog é com certeza onde encontro o melhor conteudo.
    Necessito deste codigo acima para concluir minha aplicação,pois o mesmo esta retornando erro.

    Atenciosamente,
    Cleidson Rodrigues

    • Olá Cleidson, tudo bom?
      Muito obrigado pelo elogio em relação ao Blog 🙂
      Quanto ao seu problema, qual erro está dando? Você tem como disponibilizar o trecho do código aqui?

      A classe WebClient pertence ao namespace System.Net. Veja a referência a ela e mais alguns exemplo no site do MSDN.

      Eduardo

  3. Cleidson Rodrigues disse:

    Olá Eduardo, desde ja agradeço pela atenção, segue o print dos erros

    Erro 1 http://img515.imageshack.us/img515/7672/erro1s.jpg

    Erro 2 http://img692.imageshack.us/img692/8326/erro2xt.jpg

    Quanto ao codigo, pedi apenas nova pagina modelo Portrait page , so alterei o nome da pagina para CineVideo.xaml , e no codigo C# coloquei este codigo acima.

    • Olá Cleidson, tudo bom?
      O problema com tua aplicação está relacionado com o TextBlock quem em meu projeto de teste eu nomeie como txtRSS. Esse TextBlock é o responsável por exibir o conteúdo devolvido pelo webclient.
      Você colocou esse elemento em seu arquivo .XAML? Veja como isso está representado no meu projeto de exemplo:


      ...
      ...
      <!--ContentPanel - place additional content here-->
      <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
      <ScrollViewer>
      <TextBlock Height="Auto" HorizontalAlignment="Left" Margin="6,6,0,0" Name="txtRSS" Text="RSS Text" VerticalAlignment="Top" Width="444" TextWrapping="Wrap" />
      </ScrollViewer>
      </Grid>
      ...
      ...

      Abraços,
      Eduardo

  4. Cleidson Rodrigues disse:

    Show Eduardo, funcionou , o que preciso modificar pra que estes dados consumidos sejam exibidos em forma te texto (noticia), tipo um leitor rss feed

    • Cleidson, se sua intenção é desenvolver um leitor de RSS então você poderia utilizar a classe SyndicationFeed do namespace System.ServiceModel.Syndication.
      Através dela você irá minimizar bastante o seu trabalho.

      []s
      Eduardo

  5. Cleidson Rodrigues disse:

    Ola Eduardo, tive batendo cabeça e obtive um enorme avanço com base em suas dicas, perdão se eu estiver sendo chato, preciso de uma dica sua, ao clicar na noticia ela não é exibida por completo (nenhum evento acontece), segue print de minha app.

    http://img822.imageshack.us/img822/4587/titulopassandomargem.jpg

    • Na boa Cleidson, vamos aprendendo juntos!
      Você quer tocar no título da notícia e então abrir o navegador para o link que está associado a ele?
      Se sim, basta escrever o título utilizando um HyperlinkButton e preencher a propriedade NavigateUri conforme o trecho de código abaixo. Considere que o HyperlinkButton se chama hlbGoto:

      hlbGoto.NavigateUri = new Uri(link, UriKind.Absolute);

      Abraços,
      Eduardao

  6. Elton disse:

    Olá, boa noite

    Sou iniciante em WP8, venho olhando seus exemplos e tem me ajudado bastante, seus exemplos são ótimos, vc está de parabéns.

    Poderia me tirar uma dúvida ? Como eu faço para ler um xml de várias lugares ?

    Desde já agradeço e obrigado.

    • Olá, tudo bom?
      Obrigado pelos elogios, mas infelizmente não sei se entendi sua dúvida… Poderia explicar melhor?

      Abraços,
      Eduardo H. Rizo

      • Elton disse:

        Olá, bom dia, obrigado pela resposta.

        É o seguinte, estou fazendo um exemplo onde leio um rss de noticias, eu gostaria de buscar esse rss em dois sites, buscar no

        wc.DownloadStringAsync(new Uri(“http://primeira_nocticias.xml”)) e tambem no

        wc.DownloadStringAsync(new Uri(“http://segunda_nocticias.xml”));

        Entendeu ?

      • Boa noite. Sim, entendi, mas não sei ainda onde está tua dificuldade.
        Você gostaria de juntar as notícias das fontes num único resultado?

        Abraços,
        Eduardo H. Rizo

  7. Hailson Silva disse:

    Olá Eduardo. Obg pelas aulas que tem nos dado. To estudando dev wp e tenho uma duvida qnt ao carregamento das noticias. Estou fazendo um site de Noticias Local de onde moro, tendo como a fonte o G1.
    Como que eu faço para que a mesma aparece ja formatada.
    A ideia tbm é utilizar o Panarama, E conforme o usuario arraste a tela para o lado, aparece as noticias divididas por suas respectivas categorias.(mais essa ideia é mais pra frente :D), so queria saber se é possivel fazer isso utilizando esse metodo do Tutorial.
    Mais de inicio se nao for encomodo, queria que vc me ajuda a mostrar a Noticia ja formatada, desde ja agradeço pela atençao. Abraços e parabens pelo Blog.

3 Pings/Trackbacks para "Curso Windows Phone – Classe WebClient para download de conteúdo da web no formato de dados binários ou strings"
  1. […] Windows Phone – Classe WebClient para download de conteúdo da web no formato de dados binári… […]

  2. […] Como o documento XML que iremos tratar nesse exemplo é oriundo de uma URL, utilizaremos a classe WebClient para realizar o download do mesmo. Para mais detalhes sobre o uso do WebClient, acesse o post Classe WebClient para download de conteúdo da web no formato de dados binários ou strings. […]

  3. […] Como o documento XML que iremos tratar nesse exemplo é oriundo de uma URL, utilizaremos a classe WebClient para realizar o download do mesmo. Para mais detalhes sobre o uso do WebClient, acesse o post Classe WebClient para download de conteúdo da web no formato de dados binários ou strings. […]

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

*