Windows Phone 7'de Isolated Storage Kullanımı

0 dakikada yazıldı

8454 defa okundu

Düzenle

Windows Phone 7 içerisinden kullanıcılara doğrudan bir dosya sistemi
gösterimi yapılmıyor aynı şekilde yazılım geliştiriciler de herhangi bir
dosya sistemine erişim yapamıyor. Yani bizim Windows Mobile 6.x'ten
alışık olduğum gibi uygulamalar dosyalarını dosya sisteminde bir yerlere
kaydetmiyorlar. Kullanılacak model her uygulamanın kendi
IsolatedStorage
alanını kullanması. Varsayılan ayarlarla her uygulamaya 2GB kota
veriliyor. Her uygulama kendi dosyalarını buraya saklayarak uygulama
açıldığında da aynı alana erişerek kullanıcıya gerekli dosyaların bir
listesini gösterebilir. Böylece son kullanıcı bakış açısı ile çok daha
derli toplu bir sistem yaratılmış oluyor. Diğer yandan uygulamaların
işletim sisteminin bulunduğu olası bir dosya sistemine erişmemesi de
güvenlik açısından çoğu sorunun önünü kesiyor. Tüm bu sistem içerisinde
uygulamanızın ayarları da aynı şekilde IsolatedStorage içerisinde
tutulabiliyor. Bu örneğimizde WP7 içerisinde ufak bir Silverlight
uygulaması yaparak kendi tanımladığımız custom bir entity'yi
IsolatedStorage içerisinde uygulama ayarı olarak saklayacağız.

[XAML]

<Grid
x
:Name="ContentGrid"
Grid.Row
="1">

    <TextBox
Height
="74" HorizontalAlignment="Left"
Margin
="120,51,0,0" Name="textBox1"
Text
="TextBox" VerticalAlignment="Top"
Width
="322" />

    <TextBox
Height
="74" HorizontalAlignment="Left"
Margin
="120,131,0,0" Name="textBox2"
Text
="TextBox" VerticalAlignment="Top"
Width
="322" />

    <Button
Content
="Button" Height="63"
HorizontalAlignment
="Left" Margin="167,227,0,0"
Name
="button1" VerticalAlignment="Top"
Width
="242" Click="button1_Click" />

</Grid>

İlk olarak uygulama ekranına iki adet TextBox ve bir de Button
yerleştiriyoruz. Bu TextBox'lar içerisindeki verileri bir Entity'ye
aktardıktan sonra söz konusu Entity'yi de IsolatedStorage içerisinde
ApplicationSetting olarak saklayacağız. Kaydetme işlemini doğrudan
Button'un Click durumunda yapabiliriz.

[C#]

public class Urun

{

    public string Adi { get; set;
}

    public int Stok { get; set;
}

}

Yukarıdaki gördüğünüz sınıf örneğimiz için kullanacağımız basit bir
Entity. TextBox'lar içerisindeki verileri ürünün adı ve stok bilgisi
şeklinde ilişkilendireceğiz. IsoStore içerisinde tüm
ApplicationSetting'ler birer String olarak saklanabildiği için bizim de
eldeki Entity'yi bir şekilde string'e serialize etmemiz sonrasında da
tabi aynı bilgisi IsoStore'dan okurken DeSerialize etmemiz gerekecek.
Bunun için en uygunu hızlıca JSON formatını kullanabileceğimiz
DataContractJsonSerializer sınıfından faydalanmak.
System.ServiceModel.Web'i projemize referans olarak eklediğimiz gibi
artık yolda devam etmeye hazırız.

System.ServiceModel.Web'i referans olarak alıyoruz.
System.ServiceModel.Web'i referans olarak alıyoruz.

[C#]

        private void button1_Click(object sender, RoutedEventArgs e)

        {

            Urun BirUrun = new Urun();

            BirUrun.Adi = textBox1.Text;

            BirUrun.Stok = int.Parse(textBox2.Text);

 

            string json = "";

 

            using (MemoryStream ms =
new MemoryStream())

            {

                DataContractJsonSerializer serializer = new
DataContractJsonSerializer(BirUrun.GetType());

                serializer.WriteObject(ms, BirUrun);

                ms.Position = 0;

 

                using (StreamReader
reader = new StreamReader(ms))

                {

                    json =  reader.ReadToEnd();

                }

            }

            IsolatedStorageSettings.ApplicationSettings["BizimUrun"] = json;

        }

Yukarıdaki kodumuz kaydetme düğmemizin arkasındaki kod. Kaydet düğmesine
basıldığı gibi Entity'mizden bir adet yaratıp gerekli bilgileri de
TextBox'lardan Property'lere atadıktan sonra bir
DataContractJsonSerializer yaratarak entity'yi eldeki MemoryStream'e
serialize ediyoruz. Sonunda da MemoryStream'i okuyarak String bilgiyi
alıp hızlıca ApplicationSettings içerisinde Key/Value Pair tadında
saklıyoruz. Artık uygulamanızı kapatıp açsanız bile sürekli uygulamanıza
ait IsoStore içerisinde bu Entity bulunacaktır. Son olarak sıra geldi
kaydettiğimiz bu veriyi, uygulama ayarını bir şekilde IsoStore'dan
okuyarak uygulama ilk açıldığında TextBox'lara eski değerleri atamaya.

[C#]

        void MainPage_Loaded(object sender, RoutedEventArgs e)

        {

            if
(IsolatedStorageSettings.ApplicationSettings.Contains("BizimUrun"))

            {

                Urun BirUrun;

                string json =
IsolatedStorageSettings.ApplicationSettings["BizimUrun"].ToString();

                using (MemoryStream ms
= new
MemoryStream(Encoding.Unicode.GetBytes(json)))

                {

                    DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Urun));

                    BirUrun = (Urun)serializer.ReadObject(ms);

                }

                textBox1.Text = BirUrun.Adi;

                textBox2.Text = BirUrun.Stok.ToString();

            }

        }

Uygulamamız ilk açıldığında IsoStore içerisinde elimizdeki Key olan
"BizimUrun"'e denk gelen bir Value var mı kontrolünü yaptıktan sonra
eğer daha önce veri kaydedilmiş ise hemen okuma işlemine geçiyoruz. Yeni
bir Entity yarattıktan sonra eldeki String JSON değerini AppSettings'den
alıp ByteArray'den MemoryStream yaratıyoruz. Geriye kalan artık söz
konusu MemoryStream içerisindeki verinin
DataContractJsonSerializer tarafından bir Urun nesnesine
DeSerialize edilmesi. İşlem tamamlandıktan sonra da Entity içerisindeki
değerleri rahatlıkla uygulama arayüzündeki kontrollere atayabiliriz.

Sonuç

Gördüğünüz gibi aslında herşey normal Silverlight development tarafı ile
neredeyse bire bir aynı. Bu noktada önemli olan aslında bunun artık
WP7'de uygulama geliştirme modeli olması. IsolatedStorage WP7'de çok
önemli bir yere sahip ve her uygulamanın doğrudan Runtime tarafından
yönetilen kendi disk alanına sahip olmasına olanak tanıyor. Böylece
artık dosya sisteminde dosyayı bulup ilişkili programlama açma devri
kapanıyor onun yerine ilişkili program açılıp onun içerisinden
dosyaların listesi görünerek uygun dosya seçilik açılabiliyor. Tabi bu
bahsettiğimiz IsoStore'un normal FileSystem modunda kullanımı, diğer
yandan uygulama ile ilgili kullanıcının doğrudan kaydetme işlemi
yapmadığı ve bizim yönettiğimiz veriler bu makalede gördüğümüz üzere
ApplicationSetting olarak saklanabiliyor.

Hepinize kolay gelsin.