Xamarin.Forms Kurz webové služby
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 k objektu Label
- Kurz o objektu Button
- Kurz k objektu CollectionView
V tomto kurzu se naučíte:
- Pomocí Správce balíčků NuGet můžete do projektu přidat Newtonsoft.JsonXamarin.Forms.
- Vytvoření tříd webové služby
- Využití tříd webové služby
V sadě Visual Studio 2019 nebo Visual Studio pro Mac vytvoříte jednoduchou aplikaci, která bude ukazovat, jak načíst data úložiště .NET z webového rozhraní API GitHubu. Načtená data se zobrazí v objektu CollectionView
. Na následujících snímcích obrazovky je zachycena finální aplikace:
Přidání balíčku Newtonsoft.Json
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 WebServiceTutorial.
Důležité
Fragmenty kódu C# a XAML v tomto kurzu vyžadují, aby řešení mělo název WebServiceTutorial. 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 WebServiceTutorial, klikněte pravým tlačítkem a vyberte Spravovat balíčky NuGet...:
Ve Správci balíčků NuGet vyberte kartu Procházet, vyhledejte balíček NuGet Newtonsoft.Json, vyberte ho a kliknutím na tlačítko Nainstalovat ho přidejte do projektu:
Tento balíček poslouží k začlenění deserializace do aplikace.
Sestavte řešení a zajistěte, aby neobsahovalo chyby.
Vytvoření tříd webové služby
Požadavky REST se provádějí přes protokol HTTP pomocí stejných příkazů HTTP, které webové prohlížeče využívají k načítání stránek a k odesílání dat na servery. V tomto cvičení vytvoříte třídu, která pomocí příkazu GET načítá data úložiště .NET z webového rozhraní API GitHubu.
V Průzkumníkovi řešení přidejte do projektu WebServiceTutorial novou třídu s názvem
Constants
. Pak v souboru Constants.cs odeberte veškerý kód šablony a nahraďte ho následujícím kódem:namespace WebServiceTutorial { public static class Constants { public const string GitHubReposEndpoint = "https://api.github.com/orgs/dotnet/repos"; } }
Tento kód definuje jednu konstantu – koncový bod, na který budou vytvořeny webové žádosti.
V Průzkumníkovi řešení přidejte do projektu WebServicesTutorial novou třídu s názvem
Repository
. Pak v souboru Repository.cs odeberte veškerý kód šablony a nahraďte ho následujícím kódem:using System; using Newtonsoft.Json; namespace WebServiceTutorial { public class Repository { [JsonProperty("name")] public string Name { get; set; } [JsonProperty("description")] public string Description { get; set; } [JsonProperty("html_url")] public Uri GitHubHomeUrl { get; set; } [JsonProperty("homepage")] public Uri Homepage { get; set; } [JsonProperty("watchers")] public int Watchers { get; set; } } }
Tento kód definuje třídu
Repository
, která se používá k modelování dat JSON načítaných z webové služby. Každá vlastnost je dekorována atributemJsonProperty
, který obsahuje název pole JSON. Newtonsoft.Json použije toto mapování názvů polí JSON na vlastnosti CLR při deserializaci dat JSON do objektů modelu.Poznámka:
Výše uvedená definice třídy je zjednodušená a plně nemodeluje data JSON načítaná z webové služby.
V Průzkumníkovi řešení přidejte do projektu WebServiceTutorial novou třídu s názvem
RestService
. Pak v souboru RestService.cs odeberte veškerý kód šablony a nahraďte ho následujícím kódem:using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Diagnostics; using System.Net.Http; using System.Net.Http.Headers; using System.Threading.Tasks; using Xamarin.Forms; namespace WebServiceTutorial { public class RestService { HttpClient _client; public RestService() { _client = new HttpClient(); if (Device.RuntimePlatform == Device.UWP) { _client.DefaultRequestHeaders.Add("User-Agent", ".NET Foundation Repository Reporter"); _client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/vnd.github.v3+json")); } } public async Task<List<Repository>> GetRepositoriesAsync(string uri) { List<Repository> repositories = null; try { HttpResponseMessage response = await _client.GetAsync(uri); if (response.IsSuccessStatusCode) { string content = await response.Content.ReadAsStringAsync(); repositories = JsonConvert.DeserializeObject<List<Repository>>(content); } } catch (Exception ex) { Debug.WriteLine("\tERROR {0}", ex.Message); } return repositories; } } }
Tento kód definuje jednu metodu,
GetRepositoriesAsync
, která načte data úložiště .NET z webového rozhraní API GitHubu. Tato metoda odesílá požadavek GET pomocí metodyHttpClient.GetAsync
do webového rozhraní API, které určuje argumenturi
. Webové rozhraní API odešle odpověď, která je uložena v objektuHttpResponseMessage
. Odpověď obsahuje stavový kód HTTP, který označuje, jestli byl požadavek HTTP úspěšný nebo neúspěšný. Pokud je požadavek úspěšný, webové rozhraní API odešle odpověď HTTP se stavovým kódem 200 (OK) a odpověď JSON, která se nachází ve vlastnostiHttpResponseMessage.Content
. Tato data JSON se načtou do objektustring
pomocí metodyHttpContent.ReadAsStringAsync
a pak se deserializují do objektuList<Repository>
pomocí metodyJsonConvert.DeserializeObject
. Tato metoda používá k provádění deserializace mapování mezi názvy polí JSON a vlastnostmi CLR, která jsou definovaná ve tříděRepository
.Poznámka:
V UPW je nutné nakonfigurovat
HttpClient
objekt v konstruktoru tak, aby do všech požadavků přidal hlavičku uživatelského agenta a přijímal odpovědi JSON GitHubu.Sestavte řešení a zajistěte, aby neobsahovalo chyby.
Využití tříd webové služby
V tomto cvičení vytvoříte uživatelské rozhraní využívající třídu RestService
, která načítá data úložiště .NET z webového rozhraní API GitHubu. Načtená data budou zobrazena objektem CollectionView
.
V Průzkumníkovi řešení v projektu WebServiceTutorial 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="WebServiceTutorial.MainPage"> <StackLayout Margin="20,35,20,20"> <Button Text="Get Repository Data" Clicked="OnButtonClicked" /> <CollectionView x:Name="collectionView"> <CollectionView.ItemTemplate> <DataTemplate> <StackLayout> <Label Text="{Binding Name}" FontSize="Medium" /> <Label Text="{Binding Description}" TextColor="Silver" FontSize="Small" /> <Label Text="{Binding GitHubHomeUrl}" TextColor="Gray" FontSize="Caption" /> </StackLayout> </DataTemplate> </CollectionView.ItemTemplate> </CollectionView> </StackLayout> </ContentPage>
Tento kód deklarativně definuje uživatelské rozhraní pro stránku, která se skládá z objektu
Button
a objektuCollectionView
. ObjektButton
nastaví svoji událostClicked
na obslužnou rutinu události s názvemOnButtonClicked
, která bude vytvořena v dalším kroku. ObjektCollectionView
nastaví vlastnostCollectionView.ItemTemplate
na šablonuDataTemplate
, která definuje vzhled každé položky v objektuCollectionView
. Podřízená položka šablonyDataTemplate
jeStackLayout
, která obsahuje tři objektyLabel
. ObjektyLabel
vytvoří vazbu svých vlastnostíText
na vlastnostiName
,Description
aGitHubHomeUrl
každého objektuRepository
. Další informace o datové vazbě naleznete v tématu Xamarin.Forms Datové vazby.Kromě toho objekt
CollectionView
má název určený atributemx:Name
. Soubor kódu tak může přistupovat k danému objektu pomocí přiřazeného názvu.V Průzkumníkovi řešení v projektu WebServiceTutorial rozbalte uzel MainPage.xaml a poklikáním otevřete soubor MainPage.xaml.cs. Pak v souboru MainPage.xaml.cs odeberte veškerý kód šablony a nahraďte ho následujícím kódem:
using System; using System.Collections.Generic; using Xamarin.Forms; namespace WebServiceTutorial { public partial class MainPage : ContentPage { RestService _restService; public MainPage() { InitializeComponent(); _restService = new RestService(); } async void OnButtonClicked(object sender, EventArgs e) { List<Repository> repositories = await _restService.GetRepositoriesAsync(Constants.GitHubReposEndpoint); collectionView.ItemsSource = repositories; } } }
Metoda
OnButtonClicked
, která se spustí při klepnutí naButton
, vyvolá metoduRestService.GetRepositoriesAsync
, která načte data úložiště .NET z webového rozhraní API GitHubu. MetodaGetRepositoriesAsync
vyžaduje argumentstring
, který představuje identifikátor URI volaného webového rozhraní API. Ten vrátí poleConstants.GitHubReposEndpoint
.Po načtení požadovaných dat je vlastnost
CollectionView.ItemsSource
nastavena na získaná data.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. Klepnutím na
Button
načtěte data úložiště .NET z GitHubu:V sadě Visual Studio zastavte aplikaci.
Další informace o využívání webových služeb založených na REST naleznete v Xamarin.Formstématu Využití webové služby RESTful (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 Newtonsoft.JsonXamarin.Forms.
- Vytvoření tříd webové služby
- Využití tříd webové služby
Další kroky
Tato série kurzů se zabývala základy vytváření mobilních aplikací pomocí Xamarin.Forms. Další informace o Xamarin.Forms vývoji najdete v následujících funkcích:
- K vytvoření uživatelského rozhraní Xamarin.Forms aplikace se používají čtyři hlavní řídicí skupiny. Další informace najdete v referenčních informacích k ovládacím prvkům.
- Datová vazba je technikou propojení vlastností dvou objektů, takže změny v jedné vlastnosti se automaticky odrazí v jiné vlastnosti. Další informace najdete v článku, který se týká datových vazeb.
- Xamarin.Forms poskytuje více navigačních prostředí stránky v závislosti na použitém typu stránky. Další informace najdete v článku o navigaci.
- Styly pomáhají snížit počet opakovaných značek a umožňují snadnější změnu vzhledu aplikací. Další informace najdete v tématu Styling Xamarin.Forms Apps.
- Rozšíření značek XAML rozšiřují výkon a flexibilitu jazyka XAML tím, že umožňují nastavení atributů elementů ze zdrojů jiných, než jsou pouze literální textové řetězce. Další informace najdete v článku o rozšířeních značek XAML.
- Šablony dat poskytují možnost definovat vyjádření dat u podporovaných zobrazení. Další informace najdete v článku o šablonách dat.
- Stránky, rozložení a zobrazení se na různých platformách vykreslují odlišně pomocí třídy
Renderer
, která vytvoří nativní ovládací prvek, uspořádá ho na obrazovce a přidá chování zadané ve sdíleném kódu. Vývojáři mohou implementovat vlastní třídyRenderer
a přizpůsobit tak vzhled a chování ovládacího prvku. Další informace najdete v článku o vlastních renderech. - Efekty také umožňují přizpůsobení nativních ovládacích prvků na různých platformách. Efekty se vytvářejí v projektech specifických pro platformu podtřídou
PlatformEffect
třídy a využívají se jejich připojením k příslušnému Xamarin.Forms ovládacímu prvku. Další informace najdete v článku o efektech. - Sdílený kód má přístup k nativní funkci prostřednictvím třídy
DependencyService
. Další informace najdete v článku, který se zabývá přístupem k nativním funkcím pomocí služby DependencyService.
Alternativně, Vytváření mobilních aplikací s Xamarin.Forms, kniha Charles Petzold, je dobré místo, kde se dozvědět více o Xamarin.Forms. Kniha je dostupná ve formátu PDF a v různých formátech elektronických knih.
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.