web-dev-qa-db-ja.com

Xamarin Formsアプリで一部のユーザーデータをローカルに保存するにはどうすればよいですか?

シンプルなXamarin Formsアプリがあります。単純なPOCOオブジェクト(たとえば、Userインスタンス、または最新のツイートや注文などのリスト)を取得しました。

このオブジェクトをデバイスにローカルに保存するにはどうすればよいですか? JSONとしてシリアル化すると想像してみましょう。

また、このデータはどの程度安全ですか?キーチェーンなどの一部ですか?自動バックアップしましたか?

乾杯!

42
Pure.Krome

いくつかのオプションがあります。

  1. SQLite。このオプションはクロスプラットフォームであり、大量のデータがある場合に適切に機能します。トランザクションサポートと非同期サポートの追加ボーナスも得られます。 EDIT:過去に SQLite.Net-PCL を使用することを提案しました。 issues がAndroid 7.0のサポート(および明らかなサポートの終了)に起因するため、元々フォークされていたプロジェクトを使用することをお勧めします: sqlite-net
  2. ローカルストレージ。クロスプラットフォームストレージをサポートする素晴らしいナゲットがあります。詳細については、 PCLStorage を参照してください
  3. また、Xamarin.Formsに実装された Application.Current.Properties により、データの単純なキーと値のペアを使用できます。

どのルートがあなたのニーズに最も合っているかを調査し、見つける必要があると思います。

セキュリティに関しては、各デバイスのどこにデータを置くかによって異なります。 Androidは、デフォルトでセキュアなアプリフォルダーにアプリデータを保存します(ルート化されている場合、セキュアではありません)。 iOSには、さまざまなニーズに基づいたデータストレージ用のいくつかの異なるフォルダーがあります。詳細はこちら: iOS Data Storage

71
Will Decker

別のオプションは、xamarin forms settings plugin https://github.com/jamesmontemagno/SettingsPlugin です。ストアが必要な場合、例えばユーザーインスタンスは、読み取り時にJSONにシリアル化し、読み取り時にシリアル化解除するだけです。

ネイティブ設定管理を使用します

  • Android:SharedPreferences
  • iOS:NSUserDefaults
  • Windows Phone:IsolatedStorageSettings
  • Windows RT/UWP:ApplicationDataContainer

      public User CurrentUser
      {
         get
         {
            User user = null;
            var serializedUser = CrossSettings.Current.GetValueOrDefault<string>(UserKey);
            if (serializedUser != null)
            {
               user = JsonConvert.DeserializeObject<User>(serializedUser);
            }
    
            return user;
         }
         set
         {
            CrossSettings.Current.AddOrUpdateValue(UserKey, JsonConvert.SerializeObject(value));
         }
      }
    
19
puko

Xamarin.Essentialsを使用してください

Preferencesクラスは、アプリケーション設定をキー/値ストアに保存するのに役立ちます。

値を保存するには:

Preferences.Set("my_key", "my_value");

値を取得するには:

var myValue = Preferences.Get("my_key", "default_value");
6
chunhunghan