Windows Phone'da Web Service Kullanımı

Mobil tarafta uygulama geliştiriyorsanız Web Service’den kaçışınız imkansızdır. Çünkü database’ler ile mobil uygulama arasındaki iletişimi sağlayacak hizmet Web Service tir ve mobil uygulama aktarılacak olan veri XML yada JSON tipinde yayınlamaktadır. Bu makalede IMKB’den aldığı sonuclarla anlık Döviz Verilerini paylaşan bir XML Web Service’den gelen verileri alıp Parse işlemi yapıp daha sonrasında WP uygulamamızda gösteriyor olacağız.

 

Öncelikle ilk olarak Visual Studio’yu açıp 1 adet adı XML_Parse olan Windows Phone Pivot App Projesi oluşturalım.

 

Design sayfasında Default olarak gelen xaml kodlarını tamamiyle temizleyelim. Bunun için En dıştaki Grid içerisinde bulunan kodları silmek işimizi görecektir. Grid içerisindeki kodları sildiğimizde son hali aşağıda olduğu gibidir.

    

<!--LayoutRoot is the root grid where all page content is placed-->
    <Grid x:Name="LayoutRoot" Background="Transparent">
                  //Bu bölümdeki kodları temizledik
    </Grid>

 

 Bir sonraki işlem olarak Design sayfasını istediğimiz şekilde düzenleyelim. Görünüm olarak daha güzel görüneceğini düşündüğümden WrapPanel kullanmayı tercih ettim.WrapPanel sayesinde uygulama ekranına dinamik olarak yerleşecek Buton’lar Panorama Page gibi geliştirilmiş uygulama havası katacaktır. WrapPanel kullanmak için ilk olarak bir dll’i projenize referans vermeniz gerekiyor. http://silverlight.codeplex.com/downloads/get/270984 sitesinden Silverlight Toolkit kurup daha sonrasında aşağıda olduğu gibi Solution Explorer’da projeniz içerisinde bulunan References’a sağ tıklayıp Add Reference diyip aşağıda dosya yolunda bulunan dll’i projenize referans olarak ekliyorsunuz.

For 32-bit systems:

C:\Program Files\Microsoft SDKs\Windows Phone\v7.1\Toolkit\Aug11\Bin\Microsoft.Phone.Controls.Toolkit.dll

For 64-bit systems:

C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v7.1\Toolkit\Aug11\Bin\Microsoft.Phone.Controls.Toolkit.dll

Referansı ekledikten sonra uygulamamızın design sayfasına da aşağıda bulunan kod’u yazıyoruz.

 

xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"

Şimdi xaml kodlar��nı yazmaya başlayabiliriz. Design tarafında kullanacağımız kontrollerin kodları aşağıdaki gibi olacaktır.

       

<Grid.Background>
        <!--Pivot Control-->
        <controls:Pivot x:Name="dovizpivot">
            <!--Pivot item one-->
            <controls:PivotItem Header="Döviz Verileri">
                <ListBox x:Name="lbdovizler" ScrollViewer.VerticalScrollBarVisibility="Disabled" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
                    <ListBox.ItemsPanel>
                        <ItemsPanelTemplate>
                            <toolkit:WrapPanel></toolkit:WrapPanel>
                        </ItemsPanelTemplate>
                    </ListBox.ItemsPanel>
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel>
                                <Button x:Name="btndoviz" Content="{Binding ADI}" FontSize="32" Background="#0076dd" FontWeight="Bold" Foreground="White" Height="120" Width="150">
                                </Button>
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
            </controls:PivotItem>

 

Senaryo şu şekilde işliyor, Xml olarak gelen verileri Parse edip bir array’in içerisine atacaz ve o array’ide üstte yazdığımız lbdovizler lsitbox’ına ItemsSource olarak verecez. Sonrasında listbox’ın ItemTemplate’inde bulunan Buton’un Content’ine Bind olarak oluşturacağımız object’in ADI attribute’ünü verdiğimizden o Döviz’in ismi ekranda görünecektir.

 Şimdi ise CodeBehind’a geçelim..

Gelen Veriyi Dovizler adında class oluşturarak ona atayacağız, class aşağıdaki şekilde olacaktır.

   

//Service’in sunduğu Xml formatı aşağıdaki gibi.Bize DOVIZ türünde ADI,ALIS,SATIS attributleri olan altinkaynak adında array dönüyor

 public class Dovizler
    {
        public string ADI { get; set; }
        public string ALIS { get; set; }
        public string SATIS { get; set; }
    }

//Dovizleri saklayacağımız List array’i tanımladık.

        List<Dovizler> Dovizler = newList<Dovizler>();
        public MainPage()
        {
            InitializeComponent();
            GetResult();  //GetResult Metodunu çağırıyoruz
        }
//GetResult Metodu bize Web Service’in bulundu adrese giderek orda XML olarak yayınlanmış verileri getirecektir.
        publicvoid GetResult()
        {
            WebClient wc = newWebClient();
            wc.DownloadStringCompleted += wc_DownloadStringCompleted;
            wc.DownloadStringAsync(newUri("http://xml.altinkaynak.com.tr/doviz.xml")); //Service URL’i
        }

 

void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
            if (e.Error != null)// Eğer hata mesajı döner ise metod’dan çıkıyoruz
                return;
            try
            {
                XElement xel = XElement.Parse(e.Result);  //gelen veriyi xel’e atıyoruz ve sonrasında nesne haline getirerek array’in içerisine insert ediyoruz
                 Dovizler = from dv in xel.Elements("DOVIZ") //Doviz nesnesine gitmesini söyledik
                           selectnewDovizler()
                           {
    //Doviz nesnesinin hangi attributlerini alacağımızı belirtiyoruz
                               ADI = dv.Element("ADI").Value,
                               ALIS = dv.Element("ALIS").Value,
                               SATIS = dv.Element("SATIS").Value
                           };
                // Son olarak Array’i lbdovizler ListBox’ına ItemsSource olarak veriyoruz
                lbdovizler.ItemsSource = Dovizler;
            }
            catch (Exception)
            {
                MessageBox.Show("Lütfen Daha Sonra Tekrar Deneyin.", "Bilgilendirme", MessageBoxButton.OK);
                return;
            }
        }

Uygulamanın ekran görüntüsü aşağıda olduğu gibidir.

Comments (1) -

  • Tamda aradığım buydu, bide kaynak kodları paylaşırsan dahada süper olacak.

Add comment