10 Şubat 2012 Cuma

Android Programlama X - Shared Preference ile Ayar Kaydetmek

Herkese merhaba.

Bu yazımda sizlere Shared Preference'ın ne olduğundan ve bunu kullanarak uygulamanızdaki bazı verileri nasıl saklayabileceğinizden bahsetmeye çalışacağım.

Shared Preference ile uygulamanızdan veriler kaydedebilir, bunları daha sonra okuyabilirsiniz. Bu veriler cihazın hafızasında xml türünde saklanacaktır. O nedenle uygulamayı kapatsanız da kaydettiğiniz veriler saklanacaktır. Veriler sistemde /data/data/<uygulamanızınpaketadı>/shared_preferences/ gibi bir dizinde tutuluyor.

Bundan faydalanarak uygulamanızın ayarlarını saklayabilirsiniz. Bu yazıda buna küçük bir örnek yapıp Shared Preference'ın çalışma mantığını anlamaya çalışacağız.

İşe SharedPreferenceOgreniyorum isminde bir proje oluşturarak başlayalım.

Ana layout dosyasının içini boşalttım ve başlıyorum.
Aşağıda gördüğünüz gibi bir tane CheckBox, bir tane SeekBar, bir tane EditText ve iki tane Button nesnesi ekleyelim.
Şimdi xml görünümüne geçip düğmelerin ikisine de android:layout_weight="1" özelliğini ekleyelim.
Tasarım kısmına geçtiğimizde düğmelerin eşit ağırlıklarla genişletildiğini göreceksiniz.

android:layout_weight özelliği sayesinde düğmelerin ikisi de 1'er birim alan kapalayacak şekilde içinde bulundukları layout'a dağıtıldılar. Dikkat ederseniz düğmeleri orientation özelliği horizontal yani yatay olan bir linear layout kaplıyor.
Şimdi kullanacağımız nesnelerin id, text ve gerekli diğer özelliklerini ayarlayalım.

Ben "CheckBox nesnesi varsayılan olarak işaretli olsun." diye bir karar alarak, android:checked="true" diye bir özellik ekledim mesela.
Daha sonra düğmelere de tıklama metodlarını ekleyelim.
Şimdi işin java kısmına geçelim.

Gördüğünüz gibi gerekli nesneleri tanımlıyoruz.
Düğmeler için gerekli tıklama metodlarını oluşturuyoruz.
Şimdi Shared Preference kullanırken ihtiyacımız olacak etiketler için bir sınıf oluşturalım. Buna neden ihtiyacımız var? Projeniz büyüdükçe kullanacağınız etiketlerin, tanımlayacağınız sabitlerin sayısı artacaktır. Bunlar aynı sınıf ve/veya paket içinde kullanılmak zorunda da olmayabilirler. O nedenle bu tür etiketleri ve sabitleri tanımlayacak yeni bir sınıf oluşturmakta fayda var.
Bu sınıfın ekleneceği paketin adını da com.androidce.sharedpreferenceogreniyorum.sabitler şeklinde yazdım ben. Böylece eğer ayrı bir paketten erişme ihtiyacı duyarsam bile bu paket ismini ekleyip istediğim etiket ve sabitlere erişebileceğim.
İçine String türünden etiket olarak kullanacağımız sabit değerler tanımlıyoruz.
Şimdi ana dosyamıza geri dönelim.

Gördüğünüz gibi sabitlere erişebilmek için sabitlerin olduğu paketi import komutuyla ekledik.

Ayrıca bir tane SharedPreference nesnesi tanımladık.
Bu tanımladığımız SharedPreference nesnesine onCreate metodu içinde ilk değerini veriyoruz.

Daha sonra bizim bu eklediğimiz nesnelerin durumlarını kaydetmemize yarayacak ayarla isminde bir metod tanımlıyoruz. Sırasıyla boolean, int ve String türünde parametreler alıyor çünkü CheckBox'ın işaretli olup olmadığı bir boolean, SeekBar'ın o anki konumu bir int ve EditText'in içinde yazan yazı bir String olarak saklanıyor. Biz bu 3 nesneye ait bilgileri parametre olarak bu metoda vereceğiz, o da bunları SharedPreference sayesinde kaydedecek.

Peki bunu nasıl yapıyor? İlk önce SharedPreference.Editor türünde bir nesne oluşturuyoruz ve daha önce oluşturduğumuz SharedPreference nesnesinin edit metoduyla bu yeni oluşturduğumuz nesneye ilk değerini veriyoruz.

Daha sonra (Intent ile etkinlikler arası veri aktarma mantığının aynısı), put metodlarıyla bir etiket ve değer kullanarak ayarlarımızı ekliyor/yazıyoruz.

İşimiz bittiğindeyse commit metoduyla ayarlarımızı kaydediyoruz.

ayarla metodumuz hazır olduğuna göre düğmelerin tıklama metodlarının içini doldurabiliriz artık.

Kaydet düğmesine tıklandığında sırasıyla CheckBox, SeekBar ve EditText nesnelerinin o anki özellikleri alınıp, bizim yazdığımız ayarla metodu çağrılıyor.

Sıfırla düğmesine tıklandığında ise önce bu nesnelerin özelliklerini, daha sonra da SharedPreference ile kaydedilen ayarları sıfırlıyoruz.
Ayarları kaydettik ama uygulamanın bu ayarları okuması da gerekecek. O yüzden ayarOku isimli bir metod daha yazıyoruz ve içini aşağıdaki gibi dolduruyoruz.

Gördüğünüz gibi kaydederken kullandığımız etiketleri kullanarak ayarları önce okuyor, sonra da etkinlikteki nesnelerin özelliklerini bu okuduğumuz ayarlara göre değiştiriyoruz.

Burada get metodlarının ikinci parametreleri varsayılan değerlerdir (yani SECIMKUTUSU etiketi için varsayılan olarak true değeri, yukarıda öyle karar vermiştik).

Ayrıca uygulama ilk açıldığında ayarları okuyup en son kaldığımız yerden devam etsin diye bu etkinliğin onCreate metodunun içine ayarOku metodunu çağıran bir satır da ekliyoruz.
Şimdi düğmelere tıklandığında bilgi almak için Toast ekleyelim iki düğmeye de.
Aşağıda strings.xml dosyasının son halini görüyorsunuz.
Şimdi uygulamamızı çalıştırıp sonuçları görebiliriz.
Gördüğünüz gibi Kaydet düğmesine tıkladığımızda uygulama ayarları kaydedip bize Toast ile bilgi veriyor.
Şimdi ayarlar gerçekten kaydedilmiş mi görmek için uygulamadan çıkıp, uygulama listesinden uygulamamızı bulalım ve tekrar çalıştıralım.
Uygulamanın en son bıraktığınız ayarlarla geri gelmiş olması gerekli.

Son olarak Sıfırla düğmesini de deneyelim.
Gördüğünüz gibi ayarlar sıfırlandı ve bilgi verildi.

Evet, bugünkü yazım bu kadar arkadaşlar. SharedPreference'ın ne olduğunu ve nasıl kullanıldığını görmüş olduk. Ayrıca layout_weight özelliğinden biraz bahsettik. SharedPreferece Bu tür ayar kaydetme işlemlerinde gerçekten işinize yarabilecek bir özellik.

Bu yazıda yazdığımız uygulamayı buradan indirebilirsiniz.

İnşallah anlaşılır olmuştur.

Kolay gelsin, iyi çalışmalar. :)

Hiç yorum yok:

Yorum Gönder