Xamarin.Forms Web Hizmeti Öğreticisi
Bu öğreticiye başlamadan önce şunları başarıyla tamamlamış olmanız gerekir:
- İlk Xamarin.Forms uygulama hızlı başlangıcınızı oluşturun.
- StackLayout öğreticisi.
- Etiket öğreticisi.
- Düğme öğreticisi.
- CollectionView öğreticisi.
Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:
- Projeye Newtonsoft.Json Xamarin.Forms eklemek için NuGet Paket Yöneticisi kullanın.
- Web hizmeti sınıflarını oluşturma.
- Web hizmeti sınıflarını kullanma.
GitHub web API'sinden .NET deposu verilerini almayı gösteren basit bir uygulama oluşturmak için Visual Studio 2019 veya Mac için Visual Studio kullanacaksınız. Alınan veriler bir CollectionView
içinde görüntülenecek. Aşağıdaki ekran görüntüleri, son uygulamayı gösterir:
Newtonsoft.Json ekleme
Bu öğreticiyi tamamlamak için Visual Studio 2019 (son sürüm) ve .NET ile mobil uygulama geliştirme iş yükü sisteminizde yüklü olmalıdır. Ayrıca öğretici uygulamasını iOS üzerinde derleyebilmek için eşleştirilmiş bir Mac de gerekecektir. Xamarin platformunu yükleme hakkında bilgi için bkz. Xamarin'i Yükleme. Visual Studio 2019'u bir Mac derleme ana bilgisayarına bağlama hakkında bilgi için bkz. Xamarin.iOS geliştirme için Mac ile eşleştirme.
Visual Studio'yu başlatın ve WebServiceTutorial adlı boş Xamarin.Forms bir uygulama oluşturun.
Önemli
Bu öğreticide kullanılan C# ve XAML kod parçacıklarında çözüm adı WebServiceTutorial olarak belirlenmiştir. Farklı bir ad kullanırsanız bu öğreticideki kodları çözüme kopyaladığınızda derleme hatalarıyla karşılaşabilirsiniz.
Oluşturulan .NET Standard kitaplığı hakkında daha fazla bilgi için Bkz. Hızlı Başlangıç Ayrıntılı Bakış'taXamarin.Forms uygulamanın Xamarin.Forms anatomisi.
Çözüm Gezgini'nde WebServiceTutorial projesini seçin, sağ tıklayın ve NuGet Paketlerini Yönet'i seçin:
NuGet Paket Yöneticisi'nde Göz at sekmesini seçin, Newtonsoft.Json NuGet paketini arayın, seçin ve Yükle düğmesine tıklayarak projeye ekleyin:
Bu paket, uygulamaya JSON seri durumdan çıkarma özelliklerini eklemek için kullanılacaktır.
Hata olmadığından emin olmak için çözümü derleyin.
Web hizmeti sınıflarını oluşturma
HTTP üzerinden yapılan REST isteklerinde web tarayıcılarının sayfaları almak ve sunuculara veri göndermek için kullandıkları HTTP fiilleri kullanılır. Bu alıştırmada GitHub web API'sinden .NET deposu verilerini almak için GET fiilini kullanan bir sınıf oluşturacaksınız.
Çözüm Gezgini'ndeki WebServiceTutorial projesine
Constants
adlı yeni bir sınıf ekleyin. Ardından Constants.cs içindeki şablon kodunun tamamını silip aşağıdaki kodu ekleyin:namespace WebServiceTutorial { public static class Constants { public const string GitHubReposEndpoint = "https://api.github.com/orgs/dotnet/repos"; } }
Bu kod, web isteklerinin yapılacağı uç nokta olan tek bir sabit tanımlar.
Çözüm Gezgini'ndeki WebServicesTutorial projesine
Repository
adlı yeni bir sınıf ekleyin. Ardından Repository.cs içindeki şablon kodunun tamamını silip aşağıdaki kodu ekleyin: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; } } }
Bu kod, web hizmetinden alınan JSON verilerini modellemek için kullanılan
Repository
sınıfını tanımlar. Her özellik, bir JSON alan adını içeren birJsonProperty
özniteliğiyle düzenlenmiştir. Newtonsoft.Json, JSON verilerini model nesnelerinde seri durumdan çıkarırken JSON alan adları ile CLR özellikleri arasındaki bu eşleşmeden faydalanır.Not
Yukarıdaki sınıf tanımı basitleştirilmiştir ve web hizmetinden alınan JSON verilerinin tam modeline yer verilmemiştir.
Çözüm Gezgini'ndeki WebServiceTutorial projesine
RestService
adlı yeni bir sınıf ekleyin. Ardından RestService.cs içindeki şablon kodunun tamamını silip aşağıdaki kodu ekleyin: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; } } }
Bu kod, GitHub web API'si aracılığıyla .NET deposu verilerini alan
GetRepositoriesAsync
yöntemini tanımlar. Bu yöntem,HttpClient.GetAsync
yöntemini kullanarakuri
bağımsız değişkeniyle belirtilen web API'sine bir GET isteği gönderir. Web API'sinin gönderdiği yanıt birHttpResponseMessage
nesnesinde depolanır. Yanıtta HTTP isteğinin başarılı veya başarısız olma durumunu belirten bir HTTP durum kodu bulunur. İsteğin başarılı olması durumunda web API'si yanıt olarak HTTP durum kodu 200 (OK) veHttpResponseMessage.Content
özelliğinde bir JSON yanıtı gönderir. JSON verileriHttpContent.ReadAsStringAsync
yöntemi kullanılarakstring
içine alınır ve daha sonraJsonConvert.DeserializeObject
yöntemi kullanılarak seri durumdan çıkarılıpList<Repository>
nesnesine alınır. Bu yöntem, seri durumdan çıkarma işlemini gerçekleştirmek içinRepository
sınıfında tanımlanan JSON alan adları ile CLR özellikleri arasındaki eşlemeleri kullanır.Not
UWP'de, oluşturucudaki nesneyi tüm isteklere kullanıcı aracısı üst bilgisi eklemek ve GitHub JSON yanıtlarını kabul etmek için yapılandırmak
HttpClient
gerekir.Hata olmadığından emin olmak için çözümü derleyin.
Web hizmeti sınıflarını kullanma
Bu alıştırmada GitHub web API'sinden .NET deposu verilerini alan RestService
sınıfını kullanacak bir kullanıcı arabirimi oluşturacaksınız. Alınan veriler bir CollectionView
tarafından görüntülenecek.
Çözüm Gezgini'ndeki WebServiceTutorial projesinde MainPage.xaml dosyasına çift tıklayıp açın. Ardından MainPage.xaml içindeki şablon kodunun tamamını silip aşağıdaki kodu ekleyin:
<?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>
Bu kod, sayfanın kullanıcı arabirimini bildirimli bir şekilde tanımlar ve bu da
Button
ileCollectionView
öğesinden oluşur.Button
,Clicked
olayını bir sonraki adımda oluşturulacakOnButtonClicked
adlı olay işleyicisi olarak ayarlamıştır.CollectionView
,CollectionView.ItemTemplate
özelliğiniCollectionView
içindeki her bir öğenin görünümünü tanımlayan birDataTemplate
öğesine ayarlar.DataTemplate
alt öğesi, üçLabel
nesnesi içeren birStackLayout
öğesidir.Label
nesneleriText
özellikleriyle her birRepository
nesnesininName
,Description
veGitHubHomeUrl
özellikleri arasında veri bağlama gerçekleştirir. Veri bağlama hakkında daha fazla bilgi için bkz Xamarin.Forms . Veri Bağlama.CollectionView
ayrıcax:Name
özniteliğiyle belirtilen bir ada sahiptir. Bu da arka plandaki kodun atanmış adı kullanarak nesneye erişmesini sağlar.Çözüm Gezgini'ndeki WebServiceTutorial projesinde MainPage.xaml bölümünü genişletip MainPage.xaml.cs dosyasına çift tıklayarak açın. Ardından MainPage.xaml.cs içindeki şablon kodunun tamamını silip aşağıdaki kodu ekleyin:
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; } } }
Button
öğesine dokunulduğunda yürütülenOnButtonClicked
yöntemi,RestService.GetRepositoriesAsync
yöntemini çağırarak GitHub web API'sinden .NET deposu verilerini alır.GetRepositoriesAsync
yöntemi için çağrılan web API'si'nin URI'sinin bulunduğu birstring
bağımsız değişkeni gerekir ve bu daConstants.GitHubReposEndpoint
alanıyla döndürülür.İstenen veriler alındıktan sonra
CollectionView.ItemsSource
özelliği alınan verilere ayarlanır.Visual Studio araç çubuğunda Başlat düğmesine (Oynat düğmesine benzeyen üçgen düğme) basarak uygulamayı seçtiğiniz uzak iOS simülatöründe veya Android öykünücüsünde başlatın. GitHub'dan .NET deposu verilerini almak için
Button
öğesine dokunun:Visual Studio'da uygulamayı durdurun.
içinde Xamarin.FormsREST tabanlı web hizmetlerini kullanma hakkında daha fazla bilgi için bkz. RESTful Web Hizmeti kullanma (kılavuz).
Tebrikler!
Tebrikler, bu öğreticiyi tamamlayarak aşağıdakilerin nasıl yapıldığını öğrendiniz:
- Projeye Newtonsoft.Json Xamarin.Forms eklemek için NuGet Paket Yöneticisi kullanın.
- Web hizmeti sınıflarını oluşturma.
- Web hizmeti sınıflarını kullanma.
Sonraki adımlar
Bu öğretici serisi ile Xamarin.Formsmobil uygulama oluşturmanın temellerini ele almıştır. Geliştirme hakkında Xamarin.Forms daha fazla bilgi edinmek için aşağıdaki işlevler hakkında bilgi edinin:
- Bir Xamarin.Forms uygulamanın kullanıcı arabirimini oluşturmak için kullanılan dört ana denetim grubu vardır. Daha fazla bilgi için bkz. Denetim Başvurusu.
- Veri bağlama, iki nesnenin özelliklerini birbirine bağlayarak özelliklerden birinde yapılan değişikliklerin otomatik olarak diğer özelliğe de yansıtılmasını sağlayan bir tekniktir. Daha fazla bilgi için bkz. Veri Bağlama.
- Xamarin.Forms , kullanılan sayfa türüne bağlı olarak birden çok sayfa gezinti deneyimi sağlar. Daha fazla bilgi için bkz. Gezinti.
- Stiller, işaretleme tekrarından kaçınılmasına yardımcı olur ve uygulamaların görünümünün daha kolay değiştirilmesini sağlar. Daha fazla bilgi için bkz . Xamarin.Forms Stil Uygulamaları.
- XAML işaretleme uzantıları, öğe özniteliklerinin değişmez metin değerleri yerine farklı kaynaklardan ayarlanmasını sağlayarak XAML dilinin gücünü ve esnekliğini artırır. Daha fazla bilgi için bkz. XAML İşaretleme Uzantıları.
- Veri şablonları, desteklenen görünümlerde veri sunumunun tanımlanmasını sağlar. Daha fazla bilgi için bkz. Veri Şablonları.
- Her sayfa, düzen ve görünüm her platformda farklı bir şekilde oluşturulur ve
Renderer
sınıfı kullanıldığında yerel denetim oluşturulur, ekranda düzeni ayarlanır ve belirtilen davranış paylaşılan koda eklenir. Geliştiriciler, kendi özelRenderer
sınıflarını uygulayarak denetimlerin görünümünü ve/veya davranışını özelleştirebilir. Daha fazla bilgi için bkz. Özel Oluşturucular. - Efektler, her bir platformdaki yerel denetimlerin özelleştirilmesini sağlar. Efektler platforma özgü projelerde sınıfı alt sınıflandırılarak
PlatformEffect
oluşturulur ve uygun Xamarin.Forms bir denetime eklenerek kullanılır. Daha fazla bilgi için bkz. Efektler. - Paylaşılan kod,
DependencyService
sınıfıyla yerel işlevlere erişebilir. Daha fazla bilgi için bkz. DependencyService ile Yerel Özelliklere Erişme.
Alternatif olarak, Charles Petzold'un bir kitabı olan ileXamarin.Forms Mobil Uygulama Oluşturma hakkında Xamarin.Formsdaha fazla bilgi edinmek için iyi bir yerdir. Kitap PDF veya farklı e-kitap biçimlerinde sunulmaktadır.
İlgili bağlantılar
Bu bölümle ilgili bir sorununuz mu var? Öyleyse bu bölümü iyileştirebilmemiz için lütfen geri bildirimde bulunun.