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. :)