Vývoj Metro aplikácií pre Windows 8: 4 diel – ukladanie údajov

Zhrniem poznatky z predchádzajúceho príspevku. Počas prechodu do stavu “suspended” má aplikácia maximálne 5 sekúnd na to, aby “niekam” uložila neuložené dáta. Potom už nemôže nič. V stave “suspended” je síce aplikácia zavedená v pamäti, no v tomto stave nemôže vykonávať žiadnu činnosť. Ak operačný systém rozhodne, že aplikáciu uspí, urobí tak bez toho aby čokoľvek aplikácii oznamoval. Suma sumárum: aplikácia by mala údaje ukladať priebežne a počas zmienených 5 sekúnd uložiť aktuálne stavové informácie o tom, kde sa momentálne používateľ v aplikácii nachádza. Ako ukladať údaje? K dispozícii je niekoľko možností:

Pre otestovanie si môžete vyrobiť jednoduchú aplikáciu a v XAML kóde navrhnúť dva tlačidlá, jedno pre uloženie údajov, druhé pre ich následný výber a prvok TextBlock pre výpis uložených údajov, prípadne pre výpis potenciálneho chybového hlásenia.

 <Grid Background=”{StaticResource ApplicationPageBackgroundBrush}”>
<Button Content=”Ulož” Margin=”121,106,0,0″ Width=”102″ Click=”Button_Click_Save”/>
<Button Content=”Čítaj” Margin=”121,182,0,0″ Width=”102″ Click=”Button_Click_Load”/>
 <TextBlock x:Name=”tblVypis” Margin=”302,156,0,0″ TextWrapping=”Wrap” Text=”TextBlock”
Width=”477″ Height=”132″/>
</Grid>
Vyskúšajme možnosti ukladania. Meniť budeme kód v procedúrach pre obsluhu udalostí zatlačenia tlačidiel SAVE a LOAD. Ako námet predpokladajme hru kde chceme uložiť čo najviac údajov, napríklad v ktorej úrovni sa hráč nachádzal, meno hráča a podobne.

V úložisku AppData môžeme využiť tri typy ukladania: Local Temp a Roaming.

ApplicationDataContainer LocalSettings

Ako vyplýva z názvu jedná sa o kontajnerové úložisko kam sa ukladajú údaje o nastavení aplikácie. Príklad použitia pre kompozitné údaje:

ApplicationDataContainer localSettings = null;
public BlankPage()
{
this.InitializeComponent();
localSettings = ApplicationData.Current.LocalSettings;
}

void Button_Click_Save(object sender, RoutedEventArgs e)
{
localSettings.Values[“UrovenHry”] = 6;
}

void Button_Click_Load(object sender, RoutedEventArgs e)
{
Object uroven = localSettings.Values[“UrovenHry”];
tblVypis.Text = uroven.ToString();
}

ApplicationDataContainer RoamingSettings

Ako vyplýva z názvu jedná sa o kontajnerové úložisko v roaming app data store. Príklad použitia:

ApplicationDataContainer roamingSettings = null;
public BlankPage()
{
this.InitializeComponent();
roamingSettings = ApplicationData.Current.RoamingSettings;
}

async void Button_Click_Save(object sender, RoutedEventArgs e)
{
ApplicationDataCompositeValue composite = new ApplicationDataCompositeValue();
composite[“MenoHraca”] = “Lubo Lacko”;
composite[“UrovenHry”] = 9;
roamingSettings.Values[“HraSokoban”] = composite;
}

async void Button_Click_Load(object sender, RoutedEventArgs e)
{
ApplicationDataCompositeValue composite = (ApplicationDataCompositeValue)roamingSettings.Values[“HraSokoban”];
string ss = String.Format(“Stavové info: {{{0} = {1}, {2} = \”{3}\”}}”, “MenoHraca”, composite[“MenoHraca”], “UrovenHry”,   composite[“UrovenHry”]);
tblVypis.Text =ss;
}

StorageFile – uloženie údajov do súboru

Často sa pre ukladanie údajov využívajú XML dokumenty. Takýto dokument je vlastne textový súbor. Príklad použitia:

StorageFolder roamingFolder = null;
const string filename = “sokoban.xml”;

public BlankPage()
{
this.InitializeComponent();
roamingFolder = ApplicationData.Current.RoamingFolder;;
}

async void Button_Click_Save(object sender, RoutedEventArgs e)
{
XDocument doc = new XDocument (new XElement(“sokoban”,
new XElement(“hrac”,
new XElement(“meno”, “Lubo”),
new XElement(“dokoncene”, “2”),
new XElement(“urovne”,
new XElement(“uroven1”,
new XElement(“kroky”, “14”),
new XElement(“posuny”, “6”)
)))));
string ss = doc.ToString();
StorageFile file = await roamingFolder.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting);
await FileIO.WriteTextAsync(file, ss);
}

async void Button_Click_Load(object sender, RoutedEventArgs e)
{
try { StorageFile file = await roamingFolder.GetFileAsync(filename);
tblVypis.Text = await FileIO.ReadTextAsync(file); }
catch (Exception) {tblVypis.Text = “chyba”;}
}

Reklamy

Značky: , , ,

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ť )

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ť )

Google+ photo

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

Connecting to %s


%d bloggers like this: