Xamarin.Forms Kurz místní databáze
Než se pustíte do tohoto kurzu, měli byste úspěšně dokončit tyto položky:
- Vytvořte svůj první Xamarin.Forms rychlý start k aplikaci .
- Kurz k objektu StackLayout
- Kurz o objektu Button
- Kurz o objektu Entry
- Kurz k objektu CollectionView
V tomto kurzu se naučíte:
- Pomocí Správce balíčků NuGet můžete do projektu přidat SQLite.NETXamarin.Forms.
- Vytvořit třídy pro přístup k datům
- Využití tříd pro přístup k datům
V sadě Visual Studio 2019 nebo Visual Studio pro Mac vytvoříte jednoduchou aplikaci, která předvádí, jak ukládat data do místní databáze SQLite.NET. Na následujících snímcích obrazovky je zachycena finální aplikace:
Add SQLite.NET
K dokončení tohoto kurzu byste měli mít Visual Studio 2019 (nejnovější vydanou verzi) s nainstalovanou sadou funkcí Vývoj mobilních aplikací pomocí .NET. Kromě toho budete potřebovat spárovaný Mac pro sestavení aplikace z kurzu v iOSu. Informace o instalaci platformy Xamarin najdete v článku Instalace Xamarinu. Informace o připojení sady Visual Studio 2019 k hostiteli buildu pro Mac najdete v článku Spárování s počítačem Mac pro vývoj na platformě Xamarin.iOS.
Spusťte Visual Studio a vytvořte novou prázdnou Xamarin.Forms aplikaci s názvem LocalDatabaseTutorial.
Důležité
Fragmenty kódu C# a XAML v tomto kurzu vyžadují, aby řešení mělo název LocalDatabaseTutorial. Použití jiného názvu způsobí při kopírování kódu z tohoto kurzu do řešení chyby sestavení.
Další informace o knihovně .NET Standard, která se vytvoří, najdete v tématu Anatomie Xamarin.Forms aplikace v podrobném Xamarin.Forms kurzu Rychlý start.
V Průzkumníkovi řešení vyberte projekt LocalDatabaseTutorial, klikněte na něj pravým tlačítkem a vyberte Spravovat balíčky NuGet:
Ve Správci balíčků NuGet vyberte kartu Procházet, vyhledejte balíček NuGet sqlite-net-pcl, vyberte ho a kliknutím na tlačítko Nainstalovat ho přidejte do projektu:
Poznámka:
Existuje mnoho balíčků NuGet s podobnými názvy. Správný balíček má tyto atributy:
- Autoři: SQLite-net
- Odkaz na NuGet: sqlite-net-pcl
Bez ohledu na název balíčku je možné tento balíček NuGet použít v projektech .NET Standard.
Tento balíček poslouží k začlenění databázových operací do aplikace.
Důležité
SQLite.NET je knihovna třetí strany podporovaná z úložiště praeclarum/sqlite-net.
Sestavte řešení a zajistěte, aby neobsahovalo chyby.
Vytvořit třídy pro přístup k datům
V tomto cvičení přidáte do projektu LocalDatabaseTutorial třídy pro přístup k datům, které budou sloužit k trvalému ukládání dat o lidech do databáze.
V Průzkumníkovi řešení přidejte do projektu LocalDatabaseTutorial novou třídu s názvem
Person
. Pak v souboru Person.cs odeberte veškerý kód šablony a nahraďte ho následujícím kódem:using SQLite; namespace LocalDatabaseTutorial { public class Person { [PrimaryKey, AutoIncrement] public int ID { get; set; } public string Name { get; set; } public int Age { get; set; } } }
Tento kód definuje třídu
Person
, která bude sloužit k ukládání dat o každé osobě v aplikaci. VlastnostID
je označená pomocí atributůPrimaryKey
aAutoIncrement
, aby každá instance třídyPerson
v databázi měla jedinečné ID poskytované knihovnou SQLite.NET.V Průzkumníkovi řešení přidejte do projektu LocalDatabaseTutorial novou třídu s názvem
Database
. Pak v souboru Database.cs odeberte veškerý kód šablony a nahraďte ho následujícím kódem: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); } } }
Tato třída obsahuje kód pro vytvoření databáze, čtení dat z databáze a zápis dat do databáze. Tento kód používá asynchronní rozhraní API SQLite.NET, která přesouvají databázové operace na vlákna na pozadí. Konstruktor třídy
Database
kromě toho přijímá jako argument cestu k souboru databáze. Tuto cestu poskytneme v dalším cvičení pomocí třídyApp
.V Průzkumníkovi řešení v projektu LocalDatabaseTutorial rozbalte uzel App.xaml a poklikáním otevřete soubor App.xaml.cs. Pak v souboru App.xaml.cs odeberte veškerý kód šablony a nahraďte ho následujícím kódem:
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 } } }
Tento kód definuje vlastnost
Database
, která vytvoří novou instanciDatabase
jako jednoúčelovou databázi. Konstruktoru třídyDatabase
je jako argument předána místní cesta k souboru a název souboru (určuje místo uložení databáze).Důležité
Výhodou vystavení databáze jako jednoúčelové je to, že se vytvoří jedno připojení k databázi, které zůstává otevřené po dobu běhu aplikace, takže není nutné při provádění každé databázové operace otevírat a zavírat soubor databáze.
Sestavte řešení a zajistěte, aby neobsahovalo chyby.
Využít třídy pro přístup k datům
V tomto cvičení vytvoříte uživatelské rozhraní, které bude využívat dříve vytvořené třídy pro přístup k datům.
V Průzkumníkovi řešení v projektu LocalDatabaseTutorial poklikáním otevřete soubor MainPage.xaml. Pak v souboru MainPage.xaml odeberte veškerý kód šablony a nahraďte ho následujícím kódem:
<?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>
Tento kód deklarativně definuje uživatelské rozhraní pro stránku, která se skládá z dvou instancí
Entry
, objektuButton
a objektuCollectionView
vStackLayout
. Každá instanceEntry
má nastavenou svoji vlastnostPlaceholder
, která určuje zástupný text, který se zobrazuje před zadáním vstupu uživatele. ObjektButton
nastaví svoji událostClicked
na obslužnou rutinu události s názvemOnButtonClicked
, která bude vytvořena v dalším kroku. ObjektCollectionView
nastaví svoji vlastnostItemTemplate
naDataTemplate
, která použije objektStackLayout
a dva objektyLabel
k definování vzhledu každého řádku v objektuCollectionView
. ObjektyLabel
vytvoří vazbu svých vlastnostíText
na vlastnostiName
aAge
každého objektuPerson
v uvedeném pořadí.Kromě toho instance
Entry
a objektCollectionView
mají názvy zadané atributemx:Name
. Soubor kódu tak může přistupovat k těmto objektům pomocí přiřazených názvů.V Průzkumníkovi řešení v projektu LocalDatabaseTutorial rozbalte uzel MainPage.xaml a poklikáním otevřete soubor MainPage.xaml.cs. Potom v souboru MainPage.xaml.cs přidejte do třídy přepsání
OnAppearing
a obslužnou rutinu událostiOnButtonClicked
: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
naplníCollectionView
všemi daty uloženými v databázi. MetodaOnButtonClicked
, která se spustí po klepnutí naButton
, zadané údaje uloží do databáze před vymazáním obou instancíEntry
a aktualizováním dat v objektuCollectionView
.Poznámka:
Přepsání metody
OnAppearing
se spustí až po rozloženíContentPage
, ale těsně předtím, než se stane viditelným. Proto je to vhodné místo pro nastavení obsahu Xamarin.Forms zobrazení.Na panelu nástrojů sady Visual Studio stiskněte tlačítko Spustit (trojúhelníkové tlačítko, která se podobá tlačítku Přehrát), aby se aplikace spustila ve zvoleném vzdáleném simulátoru iOSu nebo emulátoru Androidu.
Zadejte několik položek dat a pro každou z nich klepněte na
Button
. Tím se data uloží do databáze aCollectionView
se znovu vyplní všemi databázovými daty:V sadě Visual Studio zastavte aplikaci.
Další informace o místních databázích naleznete v Xamarin.Formstématu Xamarin.Forms Místní databáze (průvodce)
Gratulujeme!
Blahopřejeme k dokončení tohoto kurzu, ve kterém jste se naučili provádět tyto akce:
- Pomocí Správce balíčků NuGet můžete do projektu přidat SQLite.NETXamarin.Forms.
- Vytvořit třídy pro přístup k datům
- Využití tříd pro přístup k datům
Další kroky
Další informace o základech vytváření mobilních aplikací najdete Xamarin.Formsv kurzu Webové služby.
Související odkazy
Máte s touto částí nějaké problémy? Pokud ano, dejte nám prosím vědět, abychom tuto část mohli vylepšit.