Xamarin.Forms Samouczek dotyczący lokalnej bazy danych
Zanim podejmiesz próbę ukończenia tego samouczka, musisz pomyślnie ukończyć następujące szkolenia:
- Skompiluj swój pierwszy Xamarin.Forms przewodnik Szybki start dotyczący aplikacji .
- Samouczek dotyczący obiektu StackLayout.
- Samouczek dotyczący obiektu Button.
- Samouczek dotyczący obiektu Entry.
- Samouczek dotyczący obiektu CollectionView.
Z tego samouczka dowiesz się, jak wykonywać następujące czynności:
- Użyj Menedżer pakietów NuGet, aby dodać SQLite.NET do Xamarin.Forms projektu.
- Tworzenie klas dostępu do danych.
- Używanie klas dostępu do danych.
Użyjesz programu Visual Studio 2019 lub Visual Studio dla komputerów Mac, aby utworzyć prostą aplikację, która pokazuje, jak przechowywać dane w lokalnej bazie danych SQLite.NET. Na poniższych zrzutach ekranu przedstawiono ostateczną wersję aplikacji:
Dodawanie biblioteki SQLite.NET
Do ukończenia tego samouczka jest potrzebny program Visual Studio 2019 (najnowsza wersja) z zainstalowanym pakietem roboczym Opracowywanie aplikacji mobilnych za pomocą środowiska .NET. Ponadto będzie potrzebny sparowany komputer Mac w celu kompilowania aplikacji samouczka w systemie iOS. Aby uzyskać informacje na temat instalowania platformy Xamarin, zobacz Instalowanie platformy Xamarin. Aby uzyskać informacje na temat łączenia programu Visual Studio 2019 z hostem kompilacji Mac, zobacz Parowanie z komputerem Mac w celu opracowywania aplikacji platformy Xamarin.iOS.
Uruchom program Visual Studio i utwórz nową pustą Xamarin.Forms aplikację o nazwie LocalDatabaseTutorial.
Ważne
Fragmenty kodu w języku C# i XAML w tym samouczku wymagają, aby rozwiązanie miało nazwę LocalDatabaseTutorial. Użycie innej nazwy spowoduje błędy kompilacji po skopiowaniu kodu z tego samouczka do rozwiązania.
Aby uzyskać więcej informacji na temat tworzonej biblioteki .NET Standard, zobacz Anatomia Xamarin.Forms aplikacji w przewodnikuXamarin.Forms Szybki start — szczegółowe omówienie.
W Eksploratorze rozwiązań wybierz projekt LocalDatabaseTutorial, kliknij prawym przyciskiem myszy i wybierz pozycję Zarządzaj pakietami NuGet:
W Menedżerze pakietów NuGet wybierz kartę Przeglądaj, wyszukaj pakiet NuGet sqlite-net-pcl, zaznacz go, a następnie kliknij przycisk Zainstaluj, aby dodać pakiet do projektu:
Uwaga
Istnieje wiele pakietów NuGet o podobnych nazwach. Poprawny pakiet ma następujące atrybuty:
- Autorzy: SQLite-net
- Link NuGet: sqlite-net-pcl
Niezależnie od nazwy pakietu ten pakiet NuGet może być używany w projektach platformy .NET Standard.
Ten pakiet zostanie użyty w celu uwzględnienia operacji baz danych w aplikacji.
Ważne
SQLite.NET to biblioteka innej firmy obsługiwana przez repozytorium praeclarum/sqlite-net.
Skompiluj rozwiązanie, aby upewnić się, że nie ma żadnych błędów.
Tworzenie klas dostępu do danych
W tym ćwiczeniu dodasz klasy dostępu do danych do projektu LocalDatabaseTutorial, który będzie używany do utrwalania danych dotyczących osób w bazie danych.
W Eksploratorze rozwiązań w projekcie LocalDatabaseTutorial dodaj do projektu nową klasę o nazwie
Person
. Następnie w pliku Person.cs usuń cały kod szablonu i zastąp go następującym kodem:using SQLite; namespace LocalDatabaseTutorial { public class Person { [PrimaryKey, AutoIncrement] public int ID { get; set; } public string Name { get; set; } public int Age { get; set; } } }
Ten kod definiuje klasę
Person
, która przechowuje dane dotyczące poszczególnych osób w aplikacji. WłaściwośćID
jest oznaczona za pomocą atrybutówPrimaryKey
iAutoIncrement
, aby zapewnić się, że każde wystąpienie obiektuPerson
w bazie danych będzie mieć unikatowy identyfikator dostarczony przez bibliotekę SQLite.NET.W Eksploratorze rozwiązań w projekcie LocalDatabaseTutorial dodaj do projektu nową klasę o nazwie
Database
. Następnie w pliku Database.cs usuń cały kod szablonu i zastąp go następującym kodem:using System.Collections.Generic; using System.Threading.Tasks; using SQLite; namespace LocalDatabaseTutorial { public class Database { readonly SQLiteAsyncConnection _database; public Database(string dbPath) { _database = new SQLiteAsyncConnection(dbPath); _database.CreateTableAsync<Person>().Wait(); } public Task<List<Person>> GetPeopleAsync() { return _database.Table<Person>().ToListAsync(); } public Task<int> SavePersonAsync(Person person) { return _database.InsertAsync(person); } } }
Ta klasa zawiera kod, który umożliwia tworzenie bazy danych, odczytywanie z niej danych i zapisywanie w niej danych. Kod używa asynchronicznych interfejsów API biblioteki SQLite.NET, które przenoszą operacje bazy danych do wątków w tle. Ponadto konstruktor
Database
przyjmuje ścieżkę pliku bazy danych jako argument. Ta ścieżka będzie podawana przez klasęApp
w następnym ćwiczeniu.W Eksploratorze rozwiązań w projekcie LocalDatabaseTutorial rozwiń węzeł App.xaml i kliknij dwukrotnie plik App.xaml.cs, aby go otworzyć. Następnie w pliku App.xaml.cs usuń cały kod szablonu i zastąp go następującym kodem:
using System; using System.IO; using Xamarin.Forms; namespace LocalDatabaseTutorial { public partial class App : Application { static Database database; public static Database Database { get { if (database == null) { database = new Database(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "people.db3")); } return database; } } public App() { InitializeComponent(); MainPage = new MainPage(); } protected override void OnStart() { // Handle when your app starts } protected override void OnSleep() { // Handle when your app sleeps } protected override void OnResume() { // Handle when your app resumes } } }
Ten kod definiuje właściwość
Database
, która tworzy nowe wystąpienie obiektuDatabase
jako pojedynczą bazę danych. Lokalna ścieżka pliku i nazwa pliku, które reprezentują miejsce przechowywania bazy danych, są przekazywane jako argument do konstruktora klasyDatabase
.Ważne
Korzyść z uwidaczniania bazy danych jako pojedynczej polega na tym, że jest tworzone połączenie pojedynczej bazy danych, które pozostaje otwarte podczas działania aplikacji, w związku z czym można uniknąć wydatków związanych z otwieraniem i zamykaniem pliku bazy danych za każdym razem, gdy jest wykonywana operacja bazy danych.
Skompiluj rozwiązanie, aby upewnić się, że nie ma żadnych błędów.
Korzystanie z klas dostępu do danych
W tym ćwiczeniu utworzysz interfejs użytkownika korzystający z wcześniej utworzonych klas dostępu do danych.
W Eksploratorze rozwiązań w projekcie LocalDatabaseTutorial kliknij dwukrotnie plik MainPage.xaml, aby go otworzyć. Następnie w pliku MainPage.xaml usuń cały kod szablonu i zastąp go następującym kodem:
<?xml version="1.0" encoding="utf-8"?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="LocalDatabaseTutorial.MainPage"> <StackLayout Margin="20,35,20,20"> <Entry x:Name="nameEntry" Placeholder="Enter name" /> <Entry x:Name="ageEntry" Placeholder="Enter age" /> <Button Text="Add to Database" Clicked="OnButtonClicked" /> <CollectionView x:Name="collectionView"> <CollectionView.ItemTemplate> <DataTemplate> <StackLayout> <Label Text="{Binding Name}" FontSize="Medium" /> <Label Text="{Binding Age}" TextColor="Silver" FontSize="Small" /> </StackLayout> </DataTemplate> </CollectionView.ItemTemplate> </CollectionView> </StackLayout> </ContentPage>
Ten kod deklaratywnie definiuje interfejs użytkownika dla strony, która składa się z dwóch wystąpień obiektów
Entry
, obiektuButton
oraz obiektuCollectionView
w obiekcieStackLayout
. Każdy obiektEntry
ma swój zestaw właściwościPlaceholder
, który określa tekst zastępczy wyświetlany przed wprowadzeniem danych przez użytkownika. ObiektButton
ustawia zdarzenieClicked
na program obsługi zdarzeń o nazwieOnButtonClicked
, który zostanie utworzony w następnym kroku. ObiektCollectionView
ustawia swoją właściwośćItemTemplate
na elementDataTemplate
, który używa obiektuStackLayout
i dwóch obiektówLabel
do definiowania wyglądu każdego wiersza w obiekcieCollectionView
. ObiektyLabel
tworzą powiązanie swoich właściwościText
z, odpowiednio, właściwościamiName
iAge
każdego obiektuPerson
.Ponadto wystąpienia obiektu
Entry
i obiektCollectionView
mają nazwy określone za pomocą atrybutux:Name
. Dzięki temu plik związany z kodem może uzyskać dostęp tych obiektów przy użyciu przypisanej nazwy.W Eksploratorze rozwiązań w projekcie LocalDatabaseTutorial rozwiń węzeł MainPage.xaml i kliknij dwukrotnie plik MainPage.xaml.cs, aby go otworzyć. Następnie w pliku MainPage.xaml.cs dodaj do klasy przesłonięcie
OnAppearing
i program obsługi zdarzeńOnButtonClicked
:protected override async void OnAppearing() { base.OnAppearing(); collectionView.ItemsSource = await App.Database.GetPeopleAsync(); } async void OnButtonClicked(object sender, EventArgs e) { if (!string.IsNullOrWhiteSpace(nameEntry.Text) && !string.IsNullOrWhiteSpace(ageEntry.Text)) { await App.Database.SavePersonAsync(new Person { Name = nameEntry.Text, Age = int.Parse(ageEntry.Text) }); nameEntry.Text = ageEntry.Text = string.Empty; collectionView.ItemsSource = await App.Database.GetPeopleAsync(); } }
Metoda
OnAppearing
wypełnia obiektCollectionView
przy użyciu dowolnych danych przechowywanych w bazie danych. MetodaOnButtonClicked
wykonywana po naciśnięciu obiektuButton
zapisuje wprowadzone dane do bazy danych przed wyczyszczeniem obu wystąpieńEntry
i odświeżeniem danych w obiekcieCollectionView
.Uwaga
Przesłonięcie metody
OnAppearing
jest wykonywane po określeniu układu obiektuContentPage
, ale tuż przed tym, gdy stanie się on widoczny. W związku z tym jest to dobre miejsce do ustawiania zawartości widoków Xamarin.Forms .Na pasku narzędzi programu Visual Studio naciśnij przycisk Uruchom (trójkątny przycisk przypominający przycisk odtwarzania), aby uruchomić aplikację w wybranym zdalnym symulatorze systemu iOS lub emulatorze systemu Android.
Wprowadź kilka elementów danych, naciskając przyciski klasy
Button
dla każdego elementu danych. Spowoduje to zapisanie danych w bazie danych i ponowne wypełnienie obiektówCollectionView
przy użyciu wszystkich danych w bazie danych:Zatrzymaj aplikację w programie Visual Studio.
Aby uzyskać więcej informacji o lokalnych bazach danych w programie Xamarin.Forms, zobacz Xamarin.Forms Lokalne bazy danych (przewodnik)
Gratulacje!
Gratulujemy ukończenia tego samouczka, w którym przedstawiono sposób wykonywania następujących czynności:
- Użyj Menedżer pakietów NuGet, aby dodać SQLite.NET do Xamarin.Forms projektu.
- Tworzenie klas dostępu do danych.
- Używanie klas dostępu do danych.
Następne kroki
Aby dowiedzieć się więcej na temat podstaw tworzenia aplikacji mobilnych za pomocą Xamarin.Formsprogramu , przejdź do samouczka usługi sieci Web.
Pokrewne łącza
Widzisz problem w tej sekcji? W takim przypadku prześlij opinię, abyśmy mogli udoskonalić tę sekcję.