はじめにWindows Phone 8開発:レッスン2:ローカルアプリケーションストレージへのアクセス
はじめにWindows Phone 8開発:レッスン3.ページナビゲーションと受け渡しの設定
はじめにWindows Phone 8開発:レッスン4:サービスへの接続とデータへのバインド
それで、2番目のレッスンを始めましょう。 もっとおもしろいですね。 スマートフォンの多くの開発者は、アプリケーションのデバイス上のストレージの可用性の問題、およびそのサイズと使用に関心を持っています。 各アプリケーションには、独自の分離されたローカルストレージがあります。 他のアプリケーションやOSには依存せず、このアプリケーションのみがアクセスできます。
すぐに2つの疑問が生じます。SDカードを使用する能力と使用可能なスペースのサイズです。 最初の質問に対する答えは「はい」です。SDカードを使用できます。 2番目の質問に対する答えは無制限です。 それがすべての空き容量です。
このレッスンで作成するアプリケーションについては、テキストメッセージとカウンターの読み取り/書き込みにローカルストレージを使用します。 カウンタは、アプリケーションを起動するたびに増加し、最後に入力したメッセージも表示されます。
外観
既にお気付きのように、2つのTextBlockを使用してメッセージとカウンターを表示し、1つのTextBoxを使用して新しいメッセージを入力します。 レイアウトは、いつものように、XAMLと私のお気に入りのStackPanelを使用します。
コード
<!--contentPanel - place additional content here--> <StackPanel Grid.Row="1" Margin="12,0,12,0"> <TextBlock x:Nane="CounterBlock" HorizontalAlignment="Left" Padding="0,0,0,10" TextWrappings"Wrap" Text="You have accessed this page ## times." VerticalAlignment="Top"/> <TextBlock x:Nane="LastMessageBlock" HorizontalAlignment="Left" Padding="0,0,0,30" TextWrapping="Wrap" Text="Your last message was: ##." VerticalAlignment="Top"/> <TextBox Height="72" x:Name="NewMessage" TextWrapping="Wrap"/> <Button content="save New Message" x:Name="SaveNewMessage" /> </StackPanel>
今回は、TextBlocksに対して、Nameプロパティを設定します。これは、コンテンツを外部から転送するためです。 次に、ページが読み込まれたときに何が起こるかを考えます。
ページ読み込み
ロジックを追加する前に、必要なネームスペースが追加されていることを確認してください。
コード
using System.I0.IsolatedStorage; using System.I0; namespace Lesson2 { ....
ページをロードするときは、まず、カウンターが保存されているファイルとメッセージが存在することを確認する必要があります。 存在する場合、必要なデータを読み取り、グローバル変数に渡します。 ファイルがない場合は、新しいファイルのカウンター「0」とメッセージ「Empty」(No messages ..!)に書き込みます。 LS.txt(ローカルストレージの略)というファイルを使用します。
もちろん、string.Replace関数を使用して、文字列の「##」文字を変数値に置き換えて、TextBlocksに値を渡します。
コード
private int counter; private string message; private void PhoneApplicationPage_Loaded_1(object sender, RoutedEventArgs e) { using (var appStorage = IsolatedStorageFile.GetUserStoreForApplication()) { if (appStorage.FileExists("LS.txt")) { using (var file = appStorage.OpenFile("LS.txt", FileMode.Open)) { using (var reader = new StreamReader(file)) { counter = int.Parse(reader.ReadLine()); message = reader.ReadLine(); } } } else { using (var file = appStorage.OpenFile("LS.txt", FileMode.Create)) { using (var writer = new StreamWriter(file)) { writer.WriteLine("0"); writer.WriteLine("No messages..!"); } } } } CounterBlock.Text=CounterBlock.Text.Replace("##",counter.ToString()); LastMessageBlock.Text = LastMessageBlock.Text.Replace("##", message); }
アプリケーションを閉じるときのアクション
[戻る]または[開始]ボタンをクリックしたときにアプリケーションが閉じた場合、現在のデータでデータを更新した後、LS.txtファイルを新しいファイルに置き換えます。 最初にカウンタを増やしてから、メッセージを記録します。
コード
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e) { base.OnNavigatedFrom(e); using (var appStorage = IsolatedStorageFile.GetUserStoreForApplication()) { using (var file = appStorage.OpenFile("LS.txt", FileMode.Create)) { using (var writer = new StreamWriter(file)) { writer.WriteLine((counter+1).ToString(); writer.WriteLine(message); } } } }
さて、すべての最後に、OnNavigatedFromイベントを発生させて新しいメッセージを保存し、アプリケーションを終了する必要があります。
新しいメッセージを保存する
TextBoxの内容を変数に渡し、保存が成功したことを示すテキストメッセージをユーザーに表示します。
コード
private void SaveNewMessage_Click(object sender, RoutedEventArgs e) { message = NewMessage.Text; MessageBox.Show("Changes saved successfully"); }
テスト中
F5を押して開始し、ダウンロードを待ちます。 ロード後、カウンターに0が表示され、メッセージは表示されません。 新規募集して助かります。
[保存]をクリックすると、テキストメッセージが表示されます。 保存に成功すると、カウンターのインクリメントが呼び出され、アプリケーションが閉じます。
もう一度実行します。 すべてが機能します。 すべてが更新されています。