daisuke_nomura の日記

Android プログラマーな鉄道ファンのブログ

Windows Phone 8で文字列を保存する

はじめに
 アプリを作成すると、サーバにログインするためのアカウントや履歴を保存する機能を持たせることがあります。その場合、通常であれば(多くの場合)文字列をアプリ内に保存することで実現させます。
 Windows 8ではローカルに保存する場合は
ApplicationDataContainer.Current
.LocalSettings、MSのクラウドサービスを利用して同一MSアカウントでデータを共有する上で保存する場合はApplicationData.Current.RoamingSettingsを利用します。Windows Phone 8では、両者ともVisual Studio上で注意されずコンパイルもできますが、実行時にエラーになります。

 

次に
  Windows Phone 8では、LocalSettingsとRoamingSettingsは実装されていません。Windows 8アプリのロジックをWindows Phone 8で使おうとしてコードをコピーするとVisual Studio上で警告も出ずコンパイルもできて気付けませんので、実行時にエラーになっておかしいことに気付けます。しかもご丁寧にWindows.Storage名前空間はあります。
 Visual Studio 2012でApplicationDataContainerクラスのコードの上にマウスカーソルを置いてみると実行時にエラーになる理由に気付けます。なんとこれらのクラスは実装されていないのです。実装してないのであれば削っておけと思いますが、将来のバージョンアップで実装予定なんでしょうか。

f:id:daisuke_nomula:20121119000657p:plain

 また、Windows 8だとオブジェクトであれば何でも保存可能ですが、Windows Phone 8の場合は文字列のみ保存できます。必要に応じてJSON化しましょう。なお、ストリームを保存する場合はIsolatedStorageFileStreamを利用のこと。

 

文字列を保存する

  Windows Phone 8で文字列を保存するクラスは、Windows Phone 7と同一でIsolatedStorageSettingsクラスを利用します。利用方法はWindows 8のApplicationDataContainerクラスと似ておりKey-Valueペアで格納します。ただし、前述の通りオブジェクトは保存できず、文字列のみとなります。以下のAddメソッドを必ず使う必要はなく、配列のような書き方だけでもOK。

Windows Phoneで文字列を保存する

 

保存された文字列を読み出す
 保存された文字列を読み出す場合は、TryGetValueメソッドを使いましょう。配列のように
data = localSettings[key]と書くこともできます。お好みで。

Windows Phoneで保存した文字列を読み込む

 

 

さいごに

 Windows Phone 8で文字列を保存する場合はWindows Phone 7と同じIsolatedStorageSettingsクラスを利用し、Windows 8のApplicationDataContainerクラスは使えません。Windows Phone 8にApplicationDataContainerクラスが実装されたら、Windows 8とWindows Phone 8間でデータローミングできるのに、とか思っちゃいますよね。

 

参考
IsolatedStorageSettings クラス (System.IO.IsolatedStorage)
http://msdn.microsoft.com/ja-jp/library/system.io.isolatedstorage.isolatedstoragesettings(v=vs.95).aspx 
アプリ データのローミング - Windows 8 アプリ開発者ブログ - Site Home - MSDN Blogs
http://blogs.msdn.com/b/windowsappdev_ja/archive/2012/07/25/roaming.aspx