Лекции.Орг


Поиск:




Изолированное хранилище для файлов и папок




 

Чтобы разобраться, с основами работы с изолированным хранилищем, добавим в наше приложение возможность сохранять полученную RSS ленту между запусками и запрашивать сервер тогда, когда у нас лента не загружена или пользователь попросил обновить ленту.

 

Как обычно, сначала добавим в секцию using дополнительную директивы:

using System.IO.IsolatedStorage;

using System.IO;

 

Добавим функции сохранения и считывания файла. Для этого сначала определим константу с именем файла:

const string RSSFileName = "rss.xml";

 

Далее определим функции считывания и записи файла в строку из изолированного хранилища:

void SaveRSSToIsolatedStorage(string RSSText)

{

IsolatedStorageFile rssFileStorage =

IsolatedStorageFile.GetUserStoreForApplication();

IsolatedStorageFileStream rssFileStream =

rssFileStorage.CreateFile(RSSFileName);

 

StreamWriter sw = new StreamWriter

(rssFileStream);

sw.Write(RSSText);

sw.Close();

 

rssFileStream.Close();

}

 

 

string LoadRSSFromIsolatedStorage()

{

IsolatedStorageFile rssFileStorage =

IsolatedStorageFile.GetUserStoreForApplication();

IsolatedStorageFileStream rssFileStream =

rssFileStorage.OpenFile(RSSFileName,

System.IO.FileMode.Open);

 

StreamReader sr = new StreamReader

(rssFileStream);

string RSS = sr.ReadToEnd();

sr.Close();

rssFileStream.Close();

return RSS;

}

 

Для удобства добавления функционала также определим функцию, которая будет проверять наличие файла в изолированном хранилище.

bool IsRSSExist()

{

IsolatedStorageFile rssFileStorage =

IsolatedStorageFile.GetUserStoreForApplication();

return rssFileStorage.FileExists(RSSFileName);

}

 

Теперь выделим разбор полученного результата и связывание данных в отдельную функцию:

void ParseRSSAndBindData(string RSSText)

{

XElement twitterElements = XElement.Parse(RSSText);

 

var postList =

from tweet in twitterElements.Descendants("item")

select new PostMessage

{

title = tweet.Element("title").Value,

pubDate = tweet.Element("pubDate").Value,

link = tweet.Element("link").Value

};

RssList.ItemsSource = postList;

}

 

И добавим сохранение полученного результата в обработчик завершения загрузки:

void client_DownloadStringCompleted(object sender,

DownloadStringCompletedEventArgs e)

{

if (e.Error == null)

{

RSSString = e.Result;

 

ParseRSSAndBindData(RSSString);

 

SaveRSSToIsolatedStorage(RSSString);

}

}

 

Осталось модифицировать функцию LoadRSS():

private void LoadRSS()

{

if (IsRSSExist())

{

RSSString = LoadRSSFromIsolatedStorage();

ParseRSSAndBindData(RSSString);

}

else

{

RequestRSS();

}

}

 

Где RequestRSS() – это наша старая функция LoadRSS():

private void RequestRSS()

{

WebClient client = new WebClient();

client.DownloadStringCompleted += new

DownloadStringCompletedEventHandler(

client_DownloadStringCompleted);

client.DownloadStringAsync(new Uri(RSS));

}

 

Запустите программу под отладчиком несколько раз и убедитесь, что после первого запуска программа сохраняет результат в изолированное хранилище и больше не обращается к вебу.

 

Самостоятельно измените интерфейс, добавив кнопку для обновления и дописав необходимый код.

Локальная база данных

 

А что, если в реальности мы не хотим замусоривать изолированное хранилище файлами, которые содержат лишнюю информацию, а также мы хотим выполнять анализ полученных данных, путем запросов к ним, тем или иным образом. Тут на помощь нам может прийти локальное хранилище реляционных данных.

 

Для того, чтобы им воспользоваться необходимо добавить в решение ссылку на библиотеку System.Data.Linq, а также добавить блок using следующие директивы:

using System.Data.Linq;

using System.Data.Linq.Mapping;

using System.ComponentModel;

using System.Collections.ObjectModel;

 

Далее необходимо определить классы, которое будут представлять сущности для хранения в локальной базе, отаттрибутировать их соответсвующим образом ([Table] и [Column] с параметрами) и реализовать 2 интерфейса INotifyPropertyChanged, INotifyPropertyChanging, чтобы минимизировать использование памяти.

 

Затем необходимо определить свой класс контекста данных, унаследованный от DataContext и определить в нем таблицы. Это создаст базовую инфраструктуру для использования локальной базы данных на устройстве.

 

 

Для дальнейшего изучения работы с базой данных, можно посмотреть простой пошаговый пример создания приложения для работы с базой данных можно посмотреть здесь: http://msdn.microsoft.com/en-us/library/hh202876(v=VS.92).aspx

 

Более сложный пример приложения, работающего с локальной базой данных и сделанного в паттерне MVVM можно скачать здесь: http://go.microsoft.com/fwlink/?LinkId=219066, краткое пояснение к проекту доступно по следующей ссылке http://msdn.microsoft.com/en-us/library/hh286405(v=VS.92).aspx

 





Поделиться с друзьями:


Дата добавления: 2017-02-24; Мы поможем в написании ваших работ!; просмотров: 266 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Своим успехом я обязана тому, что никогда не оправдывалась и не принимала оправданий от других. © Флоренс Найтингейл
==> читать все изречения...

867 - | 781 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.008 с.