How can I save some user data locally on my Xamarin Forms app?

76,800

Solution 1

You have a couple options.

  1. SQLite. This option is cross-platform and works well if you have a lot of data. You get the added bonus of transaction support and async support as well. EDIT: In the past I suggested using SQLite.Net-PCL. Due to issues involving Android 7.0 support (and an apparent sunsetting of support) I now recommend making use of the project that was originally forked from: sqlite-net
  2. Local storage. There's a great nuget that supports cross-platform storage. For more information see PCLStorage
  3. There's also Application.Current.Properties implemented in Xamarin.Forms that allow simple Key-Value pairs of data.

I think you'll have to investigate and find out which route serves your needs best.

As far as security, that depends on where you put your data on each device. Android stores app data in a secure app folder by default (not all that secure if you're rooted). iOS has several different folders for data storage based on different needs. Read more here: iOS Data Storage

Solution 2

Another option is the Xamarin Forms settings plugin.

E.g. If you need to store a user instance, just serialize it to json when storing and deserialize it when reading.

Uses the native settings management

  • 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));
         }
      }
    

EDIT: There is a new solution for this. Just use Xamarin.Essentials.

Preferences.Set(UserKey, JsonConvert.SerializeObject(value));
var user= JsonConvert.DeserializeObject<User>(Preferences.Get(UserKey, "default_value");

Solution 3

Please use Xamarin.Essentials

The Preferences class helps to store application preferences in a key/value store.

To save a value:

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

To get a value:

var myValue = Preferences.Get("my_key", "default_value");
Share:
76,800
Pure.Krome
Author by

Pure.Krome

Just another djork trying to ply his art in this mad mad world. Tech stack I prefer to use: Laguage: C# / .NET Core / ASP.NET Core Editors: Visual Studio / VS Code Persistence: RavenDB, SqlServer (MSSql or Postgres) Source control: Github Containers: Docker &amp; trying to learn K&amp;'s Cloud Platform: Azure Caching/CDN: Cloudflare Finally: A Tauntaun sleeping bag is what i've always wanted spaces &gt; tabs

Updated on July 05, 2022

Comments

  • Pure.Krome
    Pure.Krome about 2 years

    I have a simple Xamarin Forms app. I've now got a simple POCO object (eg. User instance or an list of the most recent tweets or orders or whatever).

    How can I store this object locally to the device? Lets imagine I serialize it as JSON.

    Also, how secure is this data? Is it part of Keychains, etc? Auto backed up?

    cheers!

  • DestiX
    DestiX about 6 years
    For very simple data, I also recommend the Application.Current.Properties. But keep in mind, that you call Application.Current.SavePropertiesAsync(); after setting a property. Otherwise, you can not know if they will survive very a restart of the application.
  • DestiX
    DestiX about 6 years
    Also keep in mind, that the Application.Current.Properties is meant for pause-resume scenarios. The value normally does not persist when the application re-starts.
  • Pxaml
    Pxaml over 4 years
    can you save a list of items ?
  • chunhunghan
    chunhunghan over 4 years
    @Pxaml, you can see stackoverflow.com/questions/54903226/… , the second answer