Press ESC to close

Xamarin ile JSON Veri Çekmek

Merhaba arkadaşlar. Daha önce JSON nasıl veri çekileceğini yazmıştım ama bu konu hakkında çok fazla mail ve yorum geldi. Bende bu yüzden daha detaylı ve özellikle Xamarin’in içinde olduğu bir yazı yazmak istedim. Aslında Xamarin ile pek alakası yok konunun. Tüm .NET platformlarında bu işlmelerin benzerlerini yapabilirsiniz.

JSON veri çekeceğimiz için bir servisimizin olması gerekiyor. Ben bu konuya özel olarka bir servis yazmak yerine var olan örnek servisleri kullanmak istedim. Daha önce ki yazılarımda da nasıl servis yazılacağından bahsetmiştim. Arama kısmından bulabilirsiniz. Nobel ödülü kazananların listesini veren bir servis buldum. Bu servis üzerinden işlemler yapacağız. Sizde buradan ulaşabilirsiniz.

Öncelikle projemizde bir servisten verileri çekip, göndermemiz için bir class’ımızı olmalı. Burada br HttpClient oluşturup bu client üzerinden işlemlerimizi yapıyoruz. Sizin yapmak istediğiniz işlemelre göre bu sınıfı değiştirebilirsiniz. Bir token istiyorsa ekleyebilirsiniz. Ben aşağıda örnek olması için ekledim. Bu servis sınıfından GetAsync metodu ile verilerimizi çekiyor. Tabi bu fonksyion bizden bir dönüş tipi ve parametre olarak url istiyor.

using Newtonsoft.Json;
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;

namespace XamJson.Helpers
{
    class Service
    {
        public async Task<TResult> GetAsync<TResult>(string uri)
        {
            try
            {
                HttpClient httpClient = new HttpClient();
                httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                httpClient.DefaultRequestHeaders.Add("accept-language", "en");
                httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "token");

                HttpResponseMessage response = await httpClient.GetAsync(uri);
                string serialized = await response.Content.ReadAsStringAsync();
                TResult result = JsonConvert.DeserializeObject<TResult>(serialized);
                return result;
            }
            catch (Exception e)
            {
                App.Current.MainPage.DisplayAlert("Error", "General Error", "OK");
                return default(TResult);
            }
        }
    }
}

Modellerimizi oluşturmalıyız. Modeli oluşturmak için ise çok kullanışlı bir site var burayı kullanabilirsiniz. Tüm datanızı buraya kopyalayıp generate butonuna bastığınız zaman size modelleri dönmüş oluyor.

Bu modelimizi de projemize ekleyelim. Datayı generate ettiğimizde gelen model aşağıda ki gibidir.

using System.Collections.Generic;

namespace XamJson.Models
{
    public class Laureate
    {
        public string id { get; set; }
        public string firstname { get; set; }
        public string surname { get; set; }
        public string motivation { get; set; }
        public string share { get; set; }
    }

    public class Prize
    {
        public string year { get; set; }
        public string category { get; set; }
        public string overallMotivation { get; set; }
        public List<Laureate> laureates { get; set; }
    }

    public class Nobel
    {
        public List<Prize> prizes { get; set; }
    }
}

Sonrasında ise verileri çağırmak istediğimiz sayfada gerekli işlmeleri yapmamız lazım. Burada yapmamız gereken service sınıfından bir instance alıp bu servisten GetAsync metdounu çalıştırmamız gerekiyor. Dönüş tipi olarak modeli verip url’i de parametre olarak verdiğimiz sorunsuz bir şekilde çalışmıl olduğunu görüyorsunuz. Bundan sonrası ise nasıl kullanacağınıza bağlı. Bir dilerseniz belli ödülleri gösterirsiniz ekranda ya da bir ListView atıp buraya tüm datayı bind ederseniz, ekranda tüm datayaı gösterebilirsiniz.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
using XamJson.Helpers;
using XamJson.Models;

namespace XamJson
{
    [DesignTimeVisible(false)]
    public partial class MainPage : ContentPage
    {
        Service service;
        public MainPage()
        {
            InitializeComponent();
            service = new Service();
            GetNobelPrizes();
        }

        private async void GetNobelPrizes()
        {
            var takenData = await service.GetAsync<Nobel>("http://api.nobelprize.org/v1/prize.json");
        }
    }
}

 

Aslında bu işlemler bu kadar basit ve kolay. Sizde dilediğiniz gibi her türlü veriyi çekebilirsiniz. Sorularınız olursa mail veya yorum atarak ulaşabilirsiniz. İyi çalışmalar.

Comments (2)

    • omersezersays:

      Pazar Eylül 15th, 2019 at 20:15

      Selam Ali,

      Nereye ne Bind etmek istiyorsun eğer ki sayfaya bind etmek istiyorsan; C# tarafında this.bindingContext ile bin edebilirsin. Listview için is yine aynı şekilde ama xaml kısmında itemsource kısmına Binding . yapman gerekir. Ardından field alanı ile ekranda gösterebilirsin.

omersezer için bir yanıt yazın Yanıtı iptal et

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir