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

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

  1. Pingback: Curso Windows Phone – Tópicos « Blog do Eduardo H. Rizo

  2. 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

    1. 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

    1. 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

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

    1. 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

    1. 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

  4. 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.

      1. 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 ?

      2. 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

  5. Pingback: Curso Windows Phone – Como ler dados de documentos XML usando LINQ como forma de consulta | Blog do Eduardo H. Rizo

  6. 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.

    1. Bom dia Hailson, tudo bom?

      Trazer o XML referente ao feed através desse método que explico no post é uma alternativa viável. Para facilitar seu entendimento eu vou colocar alguns tópicos para ajudar a montar sua ideia.
      1) Ler o conteúdo XML e colocar os dados dentro de uma lista que represente a informação desejada. Exemplo: Como ler dados de documentos XML usando LINQ como forma de consulta
      2) Utilizar um Listbox com datatemplates para formatar e exibir os dados que você deseja. Exemplos: Vários posts sobre o assunto
      3) Provavelmente você também precisar de uma forma para exibir imagens oriundas da Internet. Exemplos: Como utilizar imagens da Internet em sua APP Windows Phone e Como exibir imagens a partir de URLs da Internet

      Bem, esse é um caminho.

      Quaisquer outras dúvidas, vá perguntando.

      Abraços,
      Eduardo H. Rizo

  7. Pingback: [Desenvolvimento] Como ler dados de documentos XML usando LINQ como forma de consulta - Windows Team

Deixe um comentário