Учебник по веб-службам в Xamarin.Forms
Прежде чем работать с этим учебником, вы должны выполнить:
- Краткое руководство Создание первого Xamarin.Forms приложения.
- Руководство по StackLayout.
- Руководство по Label.
- Руководство по Button.
- Руководство по CollectionView.
В этом руководстве описано следующее:
- Использование диспетчера пакетов NuGet для добавленияNewtonsoft.Json в проект Xamarin.Forms.
- Создавать классы веб-службы.
- Использовать классы веб-службы.
Вы создадите простое приложение, демонстрирующее получение данных репозитория .NET от веб-API GitHub, в Visual Studio 2019 или Visual Studio для Mac. Полученные данные будут отображаться в CollectionView
. На следующих снимках экрана показано готовое приложение.
Добавление Newtonsoft.Json
Для работы с этим руководством у вас должен быть последний выпуск Visual Studio 2019 с установленной рабочей нагрузкой Разработка мобильных приложений на .NET. Кроме того, вам потребуется компьютер Mac для сборки учебного приложения на iOS. Сведения об установке платформы Xamarin см. в статье Установка Xamarin. Сведения о подключении Visual Studio 2019 к узлу сборки Mac см. в статье Связывание с Mac при разработке для Xamarin.iOS.
Запустите Visual Studio и создайте пустое приложение Xamarin.Forms, присвоив ему имя WebServiceTutorial.
Внимание
Фрагменты кода на C# и XAML из этого руководства предполагают, что решение называется WebServiceTutorial. Выбор другого имени приведет к ошибкам сборки при копировании кода из этого руководства в решение.
Дополнительные сведения о создаваемой библиотеке .NET Standard см. в разделе Структура приложения Xamarin.Forms статьи Подробное изучение кратких руководств по Xamarin.Forms.
В обозревателе решений выберите проект WebServiceTutorial, щелкните правой кнопкой мыши и выберите Управление пакетами NuGet...:
В разделе Диспетчер пакетов NuGet выберите вкладку Обзор, выполните поиск пакета NuGet Newtonsoft.Json, выберите его и нажмите кнопку Установить, чтобы добавить его в проект:
Этот пакет будет использоваться для включения десериализации JSON в приложение.
Соберите решение, чтобы убедиться в отсутствии ошибок.
Создание классов веб-службы
Запросы REST выполняются по протоколу HTTP с помощью тех же HTTP-команд, которые веб-браузеры используют для извлечения страниц и отправки данных на серверы. В этом упражнении вы создадите класс, который использует команду GET для получения данных репозитория .NET от веб-API GitHub.
В обозревателе решений в проекте WebServiceTutorial добавьте новый класс с именем
Constants
. Удалите в Constants.cs весь код шаблона и замените его приведенным ниже кодом:namespace WebServiceTutorial { public static class Constants { public const string GitHubReposEndpoint = "https://api.github.com/orgs/dotnet/repos"; } }
В этом коде определяется одна константа — конечная точка, к которой будут выполняться веб-запросы.
В обозревателе решений в проекте WebServicesTutorial добавьте новый класс с именем
Repository
. Затем в файле Repository.cs удалите весь код шаблона и замените его приведенным ниже: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; } } }
В этом коде определяется класс
Repository
, который используется для моделирования данных JSON, полученных от веб-службы. Каждое свойство снабжено атрибутомJsonProperty
, который содержит имя поля JSON. Newtonsoft.Json будет использовать это сопоставление имен полей JSON со свойствами CLR при десериализации данных JSON в объекты модели.Примечание.
Приведенные выше определения класса были упрощены и не полностью моделируют данные JSON, полученные от веб-службы.
В обозревателе решений в проекте WebServiceTutorial добавьте новый класс с именем
RestService
. Затем удалите в RestService.cs весь код шаблона и замените его приведенным ниже: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; } } }
В этом коде определятся один метод
GetRepositoriesAsync
, который получает данные репозитория .NET от веб-API GitHub. Этот метод использует методHttpClient.GetAsync
для отправки запроса GET к веб-API, указанному аргументомuri
. Веб-API отправляет ответ, который хранится в объектеHttpResponseMessage
. Ответ включает код состояния HTTP, который указывает, успешно ли выполнен HTTP-запрос. Если запрос выполнен успешно, веб-API возвращает код состояния HTTP 200 (ОК) и ответ JSON, который находится в свойствеHttpResponseMessage.Content
. Эти данные JSON считываются вstring
с помощью методаHttpContent.ReadAsStringAsync
, а затем десериализируются в объектList<Repository>
с помощью методаJsonConvert.DeserializeObject
. Этот метод использует сопоставления между именами полей JSON и свойствами CLR, которые определены в классеRepository
для выполнения десериализации.Примечание.
При использовании UWP необходимо настроить в конструкторе объект
HttpClient
, который будет добавлять заголовок агента пользователя во все запросы и принимать ответы JSON с GitHub.Соберите решение, чтобы убедиться в отсутствии ошибок.
Использование классов веб-службы
В этом упражнении вы создадите пользовательский интерфейс для класса RestService
, который получает данные репозитория .NET от веб-API GitHub. Извлеченные данные будут отображаться CollectionView
.
В обозревателе решений в проекте WebServiceTutorial дважды щелкните файл MainPage.xaml, чтобы открыть его. В MainPage.xaml удалите весь код шаблона и замените его приведенным ниже кодом:
<?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>
В этом коде декларативно определяется пользовательский интерфейс для страницы, который состоит из
Button
иCollectionView
.Button
устанавливает событиеClicked
для обработчика событийOnButtonClicked
, который будет создан на следующем шаге.CollectionView
задает значениеDataTemplate
для свойстваCollectionView.ItemTemplate
, которое определяет внешний вид каждого элемента вCollectionView
. Дочерний элементDataTemplate
—StackLayout
, содержащий три объектаLabel
. ОбъектыLabel
привязывают свои свойстваText
к свойствамName
,Description
иGitHubHomeUrl
каждого из объектовRepository
. Дополнительные сведения о привязке данных см. в разделе Привязка данных Xamarin.Forms.Кроме того,
CollectionView
имеет имя, указанное с помощью атрибутаx:Name
. Это позволяет файлу с выделенным кодом получать доступ к объекту с помощью назначенного имени.В обозревателе решений в проекте WebServiceTutorial разверните узел MainPage.xaml и дважды щелкните файл MainPage.xaml.cs, чтобы открыть его. Затем удалите из MainPage.xaml.cs весь шаблонный код и замените его приведенным ниже:
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; } } }
Метод
OnButtonClicked
, который выполняется при нажатииButton
, вызывает методRestService.GetRepositoriesAsync
для получения данных репозитория .NET от веб-API GitHub. МетодGetRepositoriesAsync
требует аргументstring
, представляющий URI вызываемого веб-API. Этот URI возвращается полемConstants.GitHubReposEndpoint
.После получения запрошенных данных полученный набор данных присваивается свойству
CollectionView.ItemsSource
.На панели инструментов Visual Studio нажмите кнопку Пуск (треугольная кнопка, похожая на кнопку воспроизведения), чтобы запустить приложение в выбранном удаленном симуляторе iOS или эмуляторе Android. Нажмите
Button
, чтобы получить данные репозитория .NET из GitHub:В Visual Studio остановите приложение.
Дополнительные сведения об использовании веб-служб на базе REST в Xamarin.Forms см. в статье Использование веб-службы RESTful (руководство).
Поздравляем!
Поздравляем с завершением этого учебника, где вы научились:
- Использование диспетчера пакетов NuGet для добавленияNewtonsoft.Json в проект Xamarin.Forms.
- Создавать классы веб-службы.
- Использовать классы веб-службы.
Следующие шаги
Эта серия учебников описывает основы создания приложений для мобильных устройств с помощью Xamarin.Forms. Чтобы получить дополнительные сведения о разработке для Xamarin.Forms, ознакомьтесь со следующими функциональными возможностями:
- Для создания пользовательского интерфейса приложения Xamarin.Forms используются четыре основные группы элементов управления. Более подробную информацию см. в разделе Справочник по элементам управления.
- Привязка данных — это способ связывания свойств двух объектов так, чтобы изменения в одном свойстве автоматически отражались в другом. Более подробную информацию см. в разделе Привязка данных.
- Xamarin.Forms предоставляет несколько различных способов перехода по страницам в зависимости от используемого типа страницы. Дополнительные сведения см. в разделе Переходы.
- Стили помогают снизить повторяемость разметки и упрощают изменение внешнего вида приложения. Дополнительные сведения см. в разделе Задание стиля приложений Xamarin.Forms.
- Расширения разметки XAML позволяют расширить функциональность и гибкость XAML, давая возможность задавать атрибуты элементов из источников, отличных от строковых литералов. Подробнее см. в разделе Расширение разметки XAML.
- Шаблоны данных дают возможность настраивать представление данных в поддерживаемых представлениях. Дополнительные сведения см. в статье Шаблоны данных.
- Каждая страница, макет и представление отрисовываются по-разному на разных платформах с помощью класса
Renderer
, который создает собственный элемент управления, размещает его на экране и реализует поведение, определенное в общем коде. Разработчики могут реализовывать пользовательские классыRenderer
для настройки внешнего вида или работы элемента управления. Дополнительные сведения см. в статье Пользовательские отрисовщики. - Эффекты также позволяют настраивать собственные элементы управления на каждой платформе. Эффекты создаются в проектах для конкретных платформ путем создания подклассов класса
PlatformEffect
и используются путем их присоединения к соответствующему элементу управления Xamarin.Forms. Дополнительные сведения см. в статье Эффекты. - Общий код может получать доступ к собственным функциональным возможностям посредством класса
DependencyService
. Дополнительные сведения см. в статье, посвященной доступу к собственным функциональным возможностям с помощью DependencyService.
Много полезной информации о платформе Xamarin.Forms можно почерпнуть из книги Чарльза Петцольда (Charles Petzold) Creating Mobile Apps with Xamarin.Forms (Создание мобильных приложений с помощью Xamarin.Forms). Книга доступна в формате PDF, а также в нескольких форматах электронных книг.
Дополнительные ссылки
Возникла проблема с этим разделом? Если это так, отправьте нам отзыв, чтобы мы исправили этот раздел.