Ukladanie stavu aplikácie a údajov


Windows Phone 7 (Mango) poskytuje viac možností ako uložiť stav aplikácie, teda presnejšie obsah stavových premenných aby ste sa neskôr mohli dostať do požadovaného stavu, prípadne aby ste mohli načítať požadované údaje.

Isolated Storage

Znalci platformy Silverlight už jeden spôsob – izolovaná úložisko určite poznajú.Jedná sa zjednodušene povedané o izolovanú časť permanentnej pamäti zariadenia s obmedzenou kapacitou vyhradenú len pre Silverlight aplikáciu. aplikácií. Isolated Storage umožňuje vytvárať hierarchickú adresárovú štruktúru.

Námetom jednoduchej aplikácie bude ukladanie krátkych poznámok – tipov dňa

<!–ContentPanel – place additional content here–>

<Grid x:Name=”ContentPanel” Grid.Row=”1″ Margin=”12,0,12,0″>

<StackPanel Orientation=”Vertical”>

<TextBlock x:Name=”tblPoznamka” Text=”Uložený tip:” FontSize=”40″/>

<Button Content=”Vyber” Width=”150″ Click=”Button_Vyber” />

<TextBlock Text=”Zadaj tip: ” FontSize=”30″ Margin=”10,80,0,0″/>

<TextBox x:Name=”tbPoznamka” />

<Button Content=”Uloz” Width=”150″ Click=”Button_Uloz” />

</StackPanel>

</Grid>

 

Jadrom kódu aplikácie sú dve procedúry, jedna na uloženie textového reťazca do súboru a druhá pre jeho načítanie. Všimnite si ošetrenie výnimky, ak by sa z nejakého dôvodu nepodarilo načítať údaje zo súboru v izolovanom úložisku. Tieto procedúry sa volajú v obsluhe udalostí tlačidiel.

public void DoSuboru(string content)

{

var fileName = “poznamka.dat”;

using (var store = IsolatedStorageFile.GetUserStoreForApplication())

using (var writeStream = new IsolatedStorageFileStream(fileName,

FileMode.Create, store))

using (var writer = new StreamWriter(writeStream))

{

writer.Write(content);

}

}

 

 

 

public string ZoSuboru()

{

var fileName = “poznamka.dat”;

try

{

using (var store = IsolatedStorageFile.GetUserStoreForApplication())

using (var readStream = new IsolatedStorageFileStream(fileName,

FileMode.Open, store))

using (var reader = new StreamReader(readStream))

{

return reader.ReadToEnd();

}

}

catch (IsolatedStorageException e)

{

return String.Empty;

}

}

 

 

 

private void Button_Uloz(object sender, RoutedEventArgs e)

{

DoSuboru(tbPoznamka.Text);

}

 

private void Button_Vyber(object sender, RoutedEventArgs e)

{

tblPoznamka.Text = ZoSuboru();

}

 

Teraz môžete aplikáciu vyskúšať, Zadajte poznámku a uložte ju. Následne môžete aplikáciu ukončiť. Keď ju znovu spustíte, pomocou tlačidla vyber môžete vybrať naposledy uloženú poznámku z izolovaného úložiska.

Ukladanie údajov do Isolated storage

Do XML dokumentu môžete ukladať aj štruktúrované informácie viažúce sa k objektu, napríklad k osobe, takže po zahrievacom príklade s krátkymi poznámkami skúsime niečo zložitejšie. Takáto aplikácia sa môže hodiť ak používateľ zadáva údaje do zložitejšieho formulára a z nejakého dôvodu musí svoju prácu prerušiť

<!–ContentPanel – place additional content here–>

<StackPanel x:Name=”ContentPanel” Grid.Row=”1″ Margin=”12,0,12,0″>

<Button Content=”Ulož XML” x:Name=”btnUloz” Click=”btnUloz_Click” />

<Button Content=”Čítaj XML” x:Name=”btnCitaj” Click=”btnCitaj_Click” />

 

<ListBox x:Name=”listBox”>

<ListBox.ItemTemplate>

<DataTemplate>

<StackPanel Margin=”10″ >

<TextBlock Text=”{Binding Meno}”/>

<TextBlock Text=”{Binding Funkcia}”/>

<TextBlock Text=”{Binding Mzda}”/>

</StackPanel>

</DataTemplate>

</ListBox.ItemTemplate>

</ListBox>

<TextBlock x:Name=”tbx”/>

</StackPanel>

 

Do zložky References je potrebné pridať referenciu na System.Xml.Serialization

using System.Xml;

using System.Xml.Serialization;

using System.IO.IsolatedStorage;

using System.IO;

 

public class Zamestnanec

{

string meno;

string funkcia;

int mzda;

 

public string Meno

{

get { return meno; }

set { meno = value; }

}

 

public string Funkcia

{

get { return funkcia; }

set { funkcia = value; }

}

 

public int Mzda

{

get { return mzda; }

set { mzda = value; }

}

}

 

private List<Zamestnanec> GenerujUdaje()

{

List<Zamestnanec> data = new List<Zamestnanec>();

data.Add(new Zamestnanec() { Meno = “Mrkvová Katarína”,

Funkcia = “Asistent”, Mzda = 1800 });

data.Add(new Zamestnanec() { Meno = “Dalmy Tomás”,

Funkcia = “Obchodník”, Mzda = 2300 });

data.Add(new Zamestnanec() { Meno = “Kukučka Michal”,

Funkcia = “Riaditeľ”, Mzda = 3700 });

return data;

}

 

 

private void btnUloz_Click(object sender, RoutedEventArgs e)

{

XmlWriterSettings xmlWriterSettings = new XmlWriterSettings();

xmlWriterSettings.Indent = true;

 

using (IsolatedStorageFile myIsolatedStorage =

IsolatedStorageFile.GetUserStoreForApplication())

{

using (IsolatedStorageFileStream stream =

myIsolatedStorage.OpenFile(“Zam.xml”, FileMode.Create))

{

XmlSerializer serializer = new

XmlSerializer(typeof(List<Zamestnanec>));

using (XmlWriter xmlWriter = XmlWriter.Create(stream,

xmlWriterSettings))

{

serializer.Serialize(xmlWriter, GenerujUdaje());

}

}

}

 

}

 

private void btnCitaj_Click(object sender, RoutedEventArgs e)

{

using (IsolatedStorageFile myIsolatedStorage =

IsolatedStorageFile.GetUserStoreForApplication())

{

using (IsolatedStorageFileStream stream =

myIsolatedStorage.OpenFile(“Zam.xml”, FileMode.Open))

{

XmlSerializer serializer = new

XmlSerializer(typeof(List<Zamestnanec>));

List<Zamestnanec> data =

(List<Zamestnanec>)serializer.Deserialize(stream);

this.listBox.ItemsSource = data;

}

}

}

 

Ukladanie údajov do Isolated storage vo formáte xml

Uloženie stavu pri ukončení aplikácie

Ak sa používateľ z bežiacej aplikácie “odnaviguje”, vo Windows Phone 7.1 sa aplikácia dostane do odloženého spiaceho stavu, kedy sa beh aplikácie zastaví, takže nespotrebováva výkon procesora a tým ani energiu batérie, no aplikácia zostane zavedená v pamäti. Ak používateľ prejde späť do aplikácie, aplikácie obnoví každú stránku aplikácie do pôvodného stavu.

Aplikáciu je možné po ukončení uviesť do takzvaného zakonzervovaného “tombstoned” stavu. Vtedy je aplikácia uvoľnená aj z pamäti, ale niektoré údaje o jej predchádzajúcom stave zostanú zachované. V príklade ukážeme ako uložiť stavové údaje ovládacích prvkov po deaktivovaní aplikácie do PhoneApplicationPage objektu.

Životný cyklus aplikácie

Hlavná stránka aplikácie bude pre ilustráciu obsahovať dva ovládacie prvky TextBox a CheckBox.

<StackPanel x:Name=”ContentPanel” Grid.Row=”1″ Margin=”12,0,12,550″

Orientation=”Horizontal”>

<TextBlock Text=”Meno :” />

<TextBox
Name=”tb1″ Text=”{Binding Meno, Mode=TwoWay}” Height=”70″ Width=”350″ />

<CheckBox Name=”cb1″ IsChecked=”{Binding jeClen, Mode=TwoWay}”

Content=”CheckBox” Width=”70″ Height=”70″ />

</StackPanel>

 

Pre uloženie stavu pridajte do projektu novú triedu, ktorá bude odvodená od INotifyPropertyChanged.

using System.Runtime.Serialization;

using System.ComponentModel;

 

namespace StorageStatus

{

[DataContract]

public class ViewModel : INotifyPropertyChanged

{

private string _tb1Text;

private bool _cb1IsChecked;

 

[DataMember]

public string TextBox1Text

{

get { return _tb1Text; }

set

{

_tb1Text = value;

NotifyPropertyChanged(“Meno”);

}

}

 

[DataMember]

public bool CheckBox1IsChecked

{

get { return _cb1IsChecked; }

set

{

_cb1IsChecked = value;

NotifyPropertyChanged(“jeClen”);

}

}

 

 

 

public event PropertyChangedEventHandler PropertyChanged;

 

private void NotifyPropertyChanged(string propertyName)

{

if (null != PropertyChanged)

PropertyChanged(this, new PropertyChangedEventArgs(propertyName));

}

}

}

 

Do MainPage.xaml.cs pridajte metódy OnNavigatedFrom a OnNavigatedTo

public partial class MainPage : PhoneApplicationPage

{

ViewModel _viewModel;

bool _isNewPageInstance = false;

 

 

// Constructor

public MainPage()

{

InitializeComponent();

_isNewPageInstance = true;

 

}

 

 

protected override void

OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)

{

if (e.NavigationMode != System.Windows.Navigation.NavigationMode.Back)

{

State[“ViewModel”] = _viewModel;

}

}

 

protected override void

OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)

{

if (_isNewPageInstance)

{

if (_viewModel == null)

{

if (State.Count > 0) _viewModel = (ViewModel)State[“ViewModel”];

else _viewModel = new ViewModel();

}

DataContext = _viewModel;

}

_isNewPageInstance = false;

}

}

Obnovenie údajov po návrate zo stavu “tombstoned”

 

Alarm

Windows Mobile 7.1 podporuje vykonávanie naplánovaných úlohy, ktoré sa stanú aktívne aj vtedy ak aplikácia nie je spustená. Zjednodušene povedané, môžete naplánovať úlohu, a keď nastane naplánovaný čas začne sa úloha vykonávať. Pre tento účel sa používa trieda Alarm. Ak príslušná aplikácia nie je v dobe aktivácia alarmu spustená, naplánovaná úloha sa spustí a zobrazí sa Alarm obrazovka

 

<StackPanel x:Name=”ContentPanel” Grid.Row=”1″ Margin=”12,0,12,0″>

<TextBox x:Name=”tbPopis” Width=”450″/>

<StackPanel Orientation=”Horizontal” >

<TextBlock Text=”Oneskorenie (s) : “/>

<TextBox x:Name=”tbCas” Width=”150″/>

</StackPanel>

<StackPanel Orientation=”Horizontal” >

<Button Content=”Nastav” x:Name=”btNastav” Click=”btNastav_Click” />

<Button Content=”Reset” x:Name=”btReset” Click=”btReset_Click” />

</StackPanel>

</StackPanel>

 

Ako príklad vytvoríme jednoduchý pripomienkovač

using Microsoft.Phone.Scheduler;

 

private void btNastav_Click(object sender, RoutedEventArgs e)

{

var alarm = new Alarm(“MyAlarm”)

{

Content = tbPopis.Text,

BeginTime = DateTime.Now.AddSeconds(Convert.ToDouble(tbCas.Text))

};

ScheduledActionService.Add(alarm);

 

}

 

private void btReset_Click(object sender, RoutedEventArgs e)

{

ScheduledActionService.Remove(“MyAlarm”);

}

 

Otestovanie fungovania alarmu

Reklamy

About Luboslav Lacko

Záujem o využitie moderných telefónov pre biznis a osobný život. Cloud computing, virtualizácia, vývoj aplikácií, business intelligence
This entry was posted in Všeobecné. Bookmark the permalink.

Pridaj komentár

Zadajte svoje údaje, alebo kliknite na ikonu pre prihlásenie:

WordPress.com Logo

Na komentovanie používate váš WordPress.com účet. Odhlásiť sa /  Zmeniť )

Google photo

Na komentovanie používate váš Google účet. Odhlásiť sa /  Zmeniť )

Twitter picture

Na komentovanie používate váš Twitter účet. Odhlásiť sa /  Zmeniť )

Facebook photo

Na komentovanie používate váš Facebook účet. Odhlásiť sa /  Zmeniť )

Connecting to %s