Хранение данных на устройстве
Цель работы: освоить технологию хранения данных на устройстве
Хранение данных на устройстве
Рассмотрим учебное приложение (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
