2013-05-17 44 views
0

我試圖通過使用WP7來實現新聞(饋送者)的應用程序我試過這個解決方案,但它不適用於我,這裏是我的代碼:本地保存圖像並顯示windows phone 7

namespace PhoneApp1 

{ 
public partial class MainPage : PhoneApplicationPage 
{ 
public MainPage() 
    { 
     InitializeComponent();} 
private void Go_Click(object sender, RoutedEventArgs e) 
    { 

     WebClient _client = new WebClient(); 
     _client.DownloadStringCompleted += Feed; 
     Location.Text = "http://www.aufaitmaroc.com/feeds/ma-vie.xml"; 
     _client.DownloadStringAsync(new Uri((Location.Text))); 
     InitializeComponent(); 
    } 
private void Feed(object Sender, DownloadStringCompletedEventArgs e) 
    { 
     XElement _xml; 
     try 
     { 
      if (!e.Cancelled) 
      { 
       _xml = XElement.Parse(e.Result); 
       List<FeedItem> l = new List<FeedItem>(); 

       foreach (XElement value in _xml.Elements("channel").Elements("item")) 
       { 
        FeedItem _item = new FeedItem(); 
        _item.Title = value.Element("title").Value; 

        _item.enclosure = value.Element("enclosure").Attribute("url").Value; 


        _item.Description = Regex.Replace(value.Element("description").Value, 
        @"<(.|\n)*?>", String.Empty); 
        _item.Link = value.Element("link").Value; 
        _item.Guid = value.Element("guid").Value; 
        _item.Published = DateTime.Parse(value.Element("pubDate").Value); 
        l.Add(_item); 



        HttpWebRequest reqest1 = (HttpWebRequest)WebRequest.Create(_item.enclosure); 
        reqest1.BeginGetResponse(DownloadImageCallback, reqest1); 
        Thread.Sleep(1000); 
        WebClient client = new WebClient(); 
        client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted); 
        client.OpenReadAsync(new Uri(_item.enclosure), client); 

       } 

       listBox.ItemsSource = l; 

      } 

     } 
      catch 
     { 

     } 
    } 


    IsolatedStorageFile MyStore = IsolatedStorageFile.GetUserStoreForApplication(); 


    void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) 
    { 
     var resInfo = new StreamResourceInfo(e.Result, null); 
     var reader = new StreamReader(resInfo.Stream); 
     byte[] contents; 
     using (BinaryReader bReader = new BinaryReader(reader.BaseStream)) 
     { 
      contents = bReader.ReadBytes((int)reader.BaseStream.Length); 
     } 
     IsolatedStorageFileStream stream = MyStore.CreateFile("10.jpg"); 
     stream.Write(contents, 0, contents.Length); 
     stream.Close(); 
    } 


    void DownloadImageCallback(IAsyncResult result) 
    { 

     HttpWebRequest req1 = (HttpWebRequest)result.AsyncState; 
     HttpWebResponse responce = (HttpWebResponse)req1.EndGetResponse(result); 
     Stream s = responce.GetResponseStream(); 
     Deployment.Current.Dispatcher.BeginInvoke(() => 
     { 
      string directory = "Imagestest"; 
      if (!MyStore.DirectoryExists(directory)) 
      { 
       MyStore.CreateDirectory(directory); 
       IsolatedStorageFileStream stream = MyStore.CreateFile("10.jpg"); 
       using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication()) 
       { 
        using (var isoFileStream = myIsolatedStorage.CreateFile(directory + "//ANALYSE_10052013095620.jpg")) 
        { 

         var bitimage = new BitmapImage(); 


         var wb = new WriteableBitmap(bitimage); 

         var width = wb.PixelWidth; 
         var height = wb.PixelHeight; 
         // bitimage.SetSource = isoFileStream; 
         image1.Source = bitimage; 

         System.Windows.Media.Imaging.Extensions.SaveJpeg(wb, isoFileStream, width, height, 0, 100); 
        } 
       } 
      } 
      else 
      { 
       using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication()) 
       { 
        if (myIsolatedStorage.FileExists(directory + "//ANALYSE_10052013095620.jpg")) 
        { 
         myIsolatedStorage.DeleteFile(directory + "//ANALYSE_10052013095620.jpg"); 
        } 

        using (var isoFileStream = myIsolatedStorage.CreateFile(directory + "//ANALYSE_10052013095620.jpg")) 
        { 

         var bitimage = new BitmapImage(); 

         var wb = new WriteableBitmap(bitimage); 
         var width = wb.PixelWidth; 
         var height = wb.PixelHeight; 

         System.Windows.Media.Imaging.Extensions.SaveJpeg(wb, isoFileStream, width, height, 0, 100); 
        } 
       } 
      } 
     }); 
    } 
    private void listBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     FeedItem currentFeedItem = (FeedItem)listBox.SelectedItem; 
     PhoneApplicationService.Current.State["FeedItem"] = currentFeedItem; 

    } 

當我運行這個項目時,什麼都沒有發生,它不會創建任何文件夾,當我停止互聯網時,圖像不再顯示。

回答

1

如果你需要的圖像緩存在您的應用程序,我可以建議JetImageLoader庫您

特點:

  • 緩存在內存中(所以它的工作非常快名單,電網等)
  • 緩存是IsolatedStorageFile(防止每次重裝)
  • 完全異步(無滯後)
  • 通過XAML綁定轉換器的使用,你不必改變你的代碼,只是聲明轉換爲圖像

但它僅支持Windows Phone的8+

我該庫的authour,所以如果你有任何疑問,請寫信給我在這裏或創建一個問題在github