Хранение данных на устройстве
Цель работы: освоить технологию хранения данных на устройстве
Хранение данных на устройстве
Рассмотрим учебное приложение (P10_1), рис. 33.1. которое демонстрирует различные способы работы с данными в Windows Phone 8. Здесь использован адаптированный код из следующих материалов, к которым вы можете обратиться для того, чтобы найти ссылки на разделы справочной информации по используемым API: <Краткое руководство: работа с файлами и папками в Windows Phone 8> (http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj681698%28v=vs.105%29.aspx), <Краткое руководство: работа с параметрами в Windows Phone>, (http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj714090%28v=vs.105%29.aspx).
В проекте есть несколько страниц, страница MainPage.xaml используется для демонстрации работы с файлами, которые хранятся в установочном пакете приложения. В частности это – файл HelloFile.txt, содержимого которого будет считано и выведено в текстовое поле на странице. Страница AppSettingx.xaml используется для демонстрации работы с параметрами, которые можно хранить в изолированном хранилище параметров, страница LocalFolder.xaml используется для демонстрации работы с локальной папкой приложения.
В Листинге 33.1 приведен код страницы MainPage.xaml, здесь объявлены кнопки-гиперссылки для вызова других страниц и кнопка, обработчик которой содержит код, демонстрирующий работу с данными, хранящимися среди данных установочного пакета приложения.
<phone:PhoneApplicationPage x:Class="P10_1.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" FontFamily="{StaticResource PhoneFontFamilyNormal}" FontSize="{StaticResource PhoneFontSizeNormal}" Foreground="{StaticResource PhoneForegroundBrush}" SupportedOrientations="Portrait" Orientation="Portrait" shell:SystemTray.IsVisible="True"> <!--LayoutRoot представляет корневую сетку, где размещается все содержимое страницы--> <Grid x:Name="LayoutRoot" Background="Transparent"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <!--TitlePanel содержит имя приложения и заголовок страницы--> <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28"> <TextBlock Text="ДАННЫЕ" Style="{StaticResource PhoneTextNormalStyle}" Margin="12,0"/> <TextBlock Text="главная" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/> </StackPanel> <!--ContentPanel — поместите здесь дополнительное содержимое--> <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <HyperlinkButton Content="Работа с локальной папкой" HorizontalAlignment="Left" Margin="78,368,0,0" VerticalAlignment="Top" NavigateUri="/LocalFolder.xaml"/> <HyperlinkButton Content="Параметры приложения" HorizontalAlignment="Left" Margin="91,445,0,0" VerticalAlignment="Top" NavigateUri="/Appsettings.xaml"/> <Button x:Name="btnHello" Content="Приветствие" HorizontalAlignment="Left" Margin="91,211,0,0" VerticalAlignment="Top" Width="280" Click="btnHello_Click"/> <TextBlock x:Name="txtHello" HorizontalAlignment="Left" Margin="78,36,0,0" TextWrapping="Wrap" Text="Здесь будет приветствие" VerticalAlignment="Top" Height="86" Width="310"/> </Grid> </Grid> </phone:PhoneApplicationPage>Листинг 33.1. Файл MainPage.xaml
В Листинге 33.2 приведен код файла MainPage.xaml.cs.
using System; using System.Windows; using Microsoft.Phone.Controls; using Windows.Storage; using System.IO; namespace P10_1 { public partial class MainPage : PhoneApplicationPage { // Конструктор public MainPage() { InitializeComponent(); } //Получение данных файла, который хранится в устанновочном пакете приложения private async void btbHello_Click(object sender, RoutedEventArgs e) { //Получаем файл из установочного пакета приложения StorageFile helloFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///HelloFile.txt")); //Открываем файл для чтения using (Stream file = await helloFile.OpenStreamForReadAsync()) //Читаем данные и выводим в поле using (StreamReader streamReader = new StreamReader(file)) { this.txtHello.Text = streamReader.ReadToEnd(); } } } }Листинг 33.2. Файл MainPage.xaml.cs