.Net Maui Local Storage With Preferences Securestorage And Sqlite Complete Guide

 Last Update:2025-06-23T00:00:00     .NET School AI Teacher - SELECT ANY TEXT TO EXPLANATION.    8 mins read      Difficulty-Level: beginner

Understanding the Core Concepts of .NET MAUI Local Storage with Preferences, SecureStorage, and SQLite

.NET MAUI Local Storage with Preferences, SecureStorage, and SQLite

Preferences

Preferences is a lightweight local storage solution perfect for managing settings or small pieces of data. It stores data in a simple key-value format, making it easy to store and retrieve information.

Key Features:

  • Simple Key-Value Storage: Ideal for preferences, settings, and flags.
  • Cross-Platform Support: Works consistently across different platforms, including Android, iOS, and Windows.
  • Ease of Use: Minimal setup required and straightforward API.

Sample Code:

// Saving a value
Preferences.Set("username", "JohnDoe");

// Retrieving a value
string username = Preferences.Get("username", null);

Important Points:

  • Platform Differences: While Preferences is cross-platform, the underlying storage mechanism can differ. On iOS, it might be stored in NSUserDefaults, and on Android, it could be in SharedPreferences.
  • Data Types: Supports basic data types like string, int, bool, etc., but not complex objects.
  • Data Security: Data is not encrypted, so it should not be used for sensitive information.

SecureStorage

SecureStorage is designed for securely storing sensitive information, such as authentication tokens and personal details. It provides a secure way to store data, ensuring that it is encrypted and accessible only by the application that stored it.

Key Features:

  • Secure Encryption: Ensures that data is encrypted and cannot be accessed by malicious users.
  • Cross-Platform Support: Available on Android, iOS, and UWP.
  • Limited Scope: Best for small data quantities due to encryption overhead.

Sample Code:

// Saving a value
await SecureStorage.SetAsync("auth_token", "your_auth_token_here");

// Retrieving a value
string authToken = await SecureStorage.GetAsync("auth_token");

Important Points:

  • Security: Uses platform-specific secure storage mechanisms (e.g., Android Keystore and iOS Keychain).
  • Performance: Encryption adds overhead, making SecureStorage slower compared to Preferences.
  • Data Size: Not suitable for large data sets due to performance constraints and potential limitations.

SQLite

For applications that require structured data storage, SQLite is a powerful local database solution. It supports complex queries and relationships, making it ideal for scenarios where robust data management is essential.

Key Features:

  • Relational Database: Supports SQL for querying data and managing database schema.
  • Data Integrity: Ensures data consistency and integrity through relationships and constraints.
  • Cross-Platform Support: Available on Android, iOS, Windows, and more.

Sample Code:

// Initialize SQLite connection
using SQLite;
string dbPath = Path.Combine(FileSystem.AppDataDirectory, "AppDatabase.db");
var db = new SQLiteConnection(dbPath);

// Create table
db.CreateTable<Contact>();

// Insert data
Contact newContact = new Contact { Name = "John Doe", PhoneNumber = "1234567890" };
db.Insert(newContact);

// Query data
List<Contact> contacts = db.Table<Contact>().ToList();

Important Points:

  • Database Management: Requires familiarity with SQL for managing and querying data.
  • Data Integrity: Leverages SQLite's capabilities to maintain data integrity through foreign keys, constraints, and transactions.
  • Learning Curve: SQL and database design know-how are beneficial.

Conclusion

Choosing the right local storage solution depends on the specific requirements of your .NET MAUI application. For simple configuration, Preferences is ideal. For sensitive data, SecureStorage ensures security. For complex data structures, SQLite offers powerful capabilities. Understanding the strengths and limitations of each method will help you make informed decisions about local storage in your application.

Online Code run

🔔 Note: Select your programming language to check or run code at

💻 Run Code Compiler

Step-by-Step Guide: How to Implement .NET MAUI Local Storage with Preferences, SecureStorage, and SQLite

Prerequisites

  • Visual Studio 2022 (or later) with .NET MAUI workload installed.
  • Basic understanding of C# and .NET MAUI.

Step 1: Create a New .NET MAUI Project

  1. Open Visual Studio 2022 and click on "Create a new project".
  2. In the "Create a new project" window, select the "MAUI App (.NET 6+)" template and click "Next".
  3. Provide a name and location for your project and click "Create".
  4. Optionally, customize your project settings by clicking "Next" and selecting your desired platforms. Then click "Create".

Step 2: Adding Required NuGet Packages

We'll need to add a couple of NuGet packages for SQLite:

  1. Right-click on your project in the Solution Explorer and select "Manage NuGet Packages".
  2. Search for SQLitePCLRaw.bundle_sqlcipher and install it.
  3. Search for Microsoft.EntityFrameworkCore.Sqlite and install it.

Step 3: Setting Up Preferences

Preferences are used to store small non-sensitive data.

Step 3.1: Add a method to save data to Preferences

Open MauiProgram.cs and add the following using statement:

using Microsoft.Maui.Storage;

In your main page (MainPage.xaml.cs), add code to save and retrieve preferences:

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();
    }

    private void SavePreference(object sender, EventArgs e)
    {
        var userInput = entryPreference.Text;
        Preferences.Set("UserInput", userInput);
        DisplayAlert("Success", "Preference saved.", "OK");
    }

    private void GetPreference(object sender, EventArgs e)
    {
        var retrievedValue = Preferences.Get("UserInput", "No value found");
        entryPreference.Text = retrievedValue;
        DisplayAlert("Success", $"Preference retrieved: {retrievedValue}", "OK");
    }
}

Step 3.2: Add UI for Preferences

Open MainPage.xaml and add the following code:

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="YourNamespace.MainPage"
             Title="Preferences Example">

    <StackLayout VerticalOptions="Center"
                 HorizontalOptions="CenterAndExpand"
                 Padding="15">

        <Entry x:Name="entryPreference"
               Placeholder="Enter your text here" />

        <Button Text="Save Preference"
                Clicked="SavePreference" />

        <Button Text="Get Preference"
                Clicked="GetPreference" />

    </StackLayout>
</ContentPage>

Step 4: Setting Up SecureStorage

SecureStorage is used to store sensitive information securely.

Step 4.1: Add a method to save data to SecureStorage

In MainPage.xaml.cs, add methods to save and retrieve secure data:

private async Task SaveSecureData(object sender, EventArgs e)
{
    var secureInput = entrySecure.Text;
    await SecureStorage.SetAsync("SecureInput", secureInput);
    await DisplayAlert("Success", "Secure data saved.", "OK");
}

private async Task GetSecureData(object sender, EventArgs e)
{
    var retrievedSecureValue = await SecureStorage.GetAsync("SecureInput");
    entrySecure.Text = retrievedSecureValue ?? "No secure value found";
    await DisplayAlert("Success", $"Secure data retrieved: {retrievedSecureValue}", "OK");
}

Step 4.2: Add UI for SecureStorage

In MainPage.xaml, add the following UI elements:

<Entry x:Name="entrySecure"
       Placeholder="Enter your secure text here" />

<Button Text="Save Secure Data"
        Clicked="SaveSecureData" />

<Button Text="Get Secure Data"
        Clicked="GetSecureData" />

Step 5: Setting Up SQLite

SQLite is used to store structured data.

Step 5.1: Create a Data Model

Create a new folder named Models in your project and add a class named Note.cs:

public class Note
{
    [PrimaryKey, AutoIncrement]
    public int Id { get; set; }
    public string Text { get; set; }
    public DateTime Date { get; set; }
}

Step 5.2: Create a Database Context

Create a new folder named Database and add a class named AppDbContext.cs:

using Microsoft.EntityFrameworkCore;

public class AppDbContext : DbContext
{
    public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }

    public DbSet<Note> Notes { get; set; }
}

Step 5.3: Configure Database Context in MauiProgram.cs

Open MauiProgram.cs and modify the CreateBuilder method as follows:

public static MauiApp CreateMauiApp()
{
    var builder = MauiApp.CreateBuilder();
    builder
        .UseMauiApp<App>()
        .ConfigureFonts(fonts =>
        {
            fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
        });

    // Sqlite connection string
    var dbPath = Path.Combine(FileSystem.Current.AppDataDirectory, "notes.db3");

    builder.Services.AddDbContext<AppDbContext>(options =>
    {
        options.UseSqlite($"Data Source={dbPath}");
    });

    return builder.Build();
}

Step 5.4: Add UI for SQLite

In MainPage.xaml, add the following UI elements:

<Entry x:Name="entrySQLite"
       Placeholder="Enter your SQLite text here" />

<Button Text="Save SQLite Data"
        Clicked="SaveSQLiteData" />

<Button Text="Get SQLite Data"
        Clicked="GetSQLiteData" />

<ListView x:Name="listViewSQLite" />

Step 5.5: Add Methods for SQLite Operations

In MainPage.xaml.cs, add code to save and retrieve SQLite data:

private async void SaveSQLiteData(object sender, EventArgs e)
{
    var sqLiteInput = entrySQLite.Text;
    var note = new Note { Text = sqLiteInput, Date = DateTime.Now };

    using (var context = new AppDbContext(App.Current.Handler.MauiContext.Services.CreateScope().ServiceProvider.GetRequiredService<DbContextOptions<AppDbContext>>()))
    {
        context.Notes.Add(note);
        await context.SaveChangesAsync();
    }

    await DisplayAlert("Success", "SQLite data saved.", "OK");
}

private async void GetSQLiteData(object sender, EventArgs e)
{
    using (var context = new AppDbContext(App.Current.Handler.MauiContext.Services.CreateScope().ServiceProvider.GetRequiredService<DbContextOptions<AppDbContext>>()))
    {
        var notes = await context.Notes.ToListAsync();
        listViewSQLite.ItemsSource = notes;
    }

    await DisplayAlert("Success", "SQLite data retrieved.", "OK");
}

Step 6: Run the Application

Run your application on your preferred platform (e.g., Android, iOS, Windows, etc.). You should be able to test the following features:

  1. Saving and retrieving simple preferences.
  2. Saving and retrieving secure storage data.
  3. Saving and retrieving structured data using SQLite.

Summary

Top 10 Interview Questions & Answers on .NET MAUI Local Storage with Preferences, SecureStorage, and SQLite

1. What is .NET MAUI?

Answer: .NET Multi-platform App UI (.NET MAUI) is a cross-platform framework for building natively styled mobile and desktop applications with C# and XAML. It allows developers to create applications for Android, iOS, macOS, and Windows from a single codebase.

2. What are the different types of local storage options available in .NET MAUI?

Answer: .NET MAUI provides several options for local storage, including:

  • Preferences: For simple key-value pair storage.
  • SecureStorage: For storing sensitive data securely.
  • SQLite: For more complex storage needs involving databases.

3. How do you use Preferences in .NET MAUI?

Answer: Preferences is used to store simple key-value pairs where the values are strings, integers, floats, booleans, or DateTime.

// Set a preference
Preferences.Set("username", "JohnDoe");

// Get a preference
var username = Preferences.Get("username", string.Empty);

4. What is the purpose of SecureStorage in .NET MAUI?

Answer: SecureStorage is used for storing small amounts of sensitive data securely. It provides a secure way to handle sensitive information like API keys, access tokens, etc.

// Set data in SecureStorage
await SecureStorage.SetAsync("AuthKey", "mysecretkey");

// Get data from SecureStorage
var authKey = await SecureStorage.GetAsync("AuthKey");

5. How do you handle errors when using SecureStorage in .NET MAUI?

Answer: Handling errors is crucial when working with SecureStorage as it can throw exceptions due to lack of access or platform-specific issues.

try {
    var authKey = await SecureStorage.GetAsync("AuthKey");
    if (authKey != null) {
        // Use authKey
    }
} catch (Exception ex) {
    // Handle error
    Console.WriteLine($"Error accessing SecureStorage: {ex.Message}");
}

6. What are the advantages and disadvantages of using SQLite in .NET MAUI?

Answer:

  • Advantages:
    • Supports structured data.
    • Can handle complex queries and transactions.
    • Provides better data integrity and relationships via foreign keys.
  • Disadvantages:
    • Can be complex for simple applications.
    • More overhead than Preferences or SecureStorage.
    • Requires careful management of database schema.

7. How do you set up and use SQLite in a .NET MAUI application?

Answer: First, add the sqlite-net-pcl NuGet package to your project.

// Define a model
public class Item {
    [PrimaryKey, AutoIncrement]
    public int Id { get; set; }
    public string Description { get; set; }
}

// Initialize database
var dbPath = Path.Combine(FileSystem.Current.AppDataDirectory, "items.db");
var db = new SQLiteAsyncConnection(dbPath);
await db.CreateTableAsync<Item>();

// Insert data
await db.InsertAsync(new Item { Description = "Sample Item" });

// Query data
var items = await db.Table<Item>().ToListAsync();

8. How can you migrate a SQLite database schema in .NET MAUI?

Answer: Use the SQLitePCL.Batteries_V2.Init(); in the MainActivity.cs or Program.cs to initialize SQLite. Migrations often involve versioning your schema and writing scripts to alter the database.

// Example of altering a table
await db.ExecuteAsync("ALTER TABLE Item ADD COLUMN Price REAL;");

9. What are the differences between Preferences and SecureStorage in .NET MAUI?

Answer:

  • Preferences: Meant for non-sensitive data storage with easy access. Data is stored in plain text (not encrypted).
  • SecureStorage: Designed for storing small amounts of sensitive data securely (usually encrypted) using platform-specific storage mechanisms.

10. When should you use each storage method in .NET MAUI applications?

Answer:

  • Preferences: For simple settings like user preferences, app state, etc.
  • SecureStorage: For sensitive data like authentication tokens, credentials, etc.
  • SQLite: For complex data management where structured data, relationships, and queries are needed.

You May Like This Related .NET Topic

Login to post a comment.