Shared Preferences

sharedprefs

Merhabalar, bu yazıda Shared Preferences nedir ondan bahsedeceğim, örnekle anlatacağım.

Normalde tablo verileri gibi verileri kaydetmek için SQL kullanılır. Uygulamaya ait oldukça küçük veriler saklamak istediğimiz zaman SQL gibi büyük bir yapı yerine aynı işlevi gören Shared Preferences yapısını kullanmak daha pratik olacaktır.

  • Bu yapı ile String, int, boolean, float ve long türünde veriler key/value pair’leri saklayabiliriz.
  • Builder pattern ile yazıldığından istediğiniz veriyi tek satırda kayıtlayabilirsiniz.
  • Activity-specific veri kaydetmek istiyorsak getPreferences(); proje genelinde erişilebilir veri kaydetmek istiyorsak getSharedPreferences() metodunu kullanabiliriz.
  • getDefaultSharedPreferences() metodu bazı cihazlarda çalışmamaktadır, bunun yerine getSharedPreferences() metodu tercih edilebilir.
  • getSharedPreferences(String name, int mode) metoduna ikinci parametre olarak mod alır ve bu moda göre editleme işlemi yapılır.
  • Dosyaların kaydedildiği yer aygıt içerisinde genelde şu dizindir:
    /data/data/com.package.name/shared_prefs/com.package.name_preferences.xml

Veri kaydetme
İlk olarak field değişkenini tanımlıyoruz, sonra değişkeni kullanarak kaydetmek istediğimiz verileri kaydediyoruz ve commit ediyoruz. Veri çekerken veya silerken de aynı değişkeni kullanacağız.

private SharedPreferences mPreferences;
String name = personObject.getName();
int age = personObject.getAge();
mPreferences.edit()
		.putString(USERNAME, name)
		.putInt(USERAGE, age)
		.commit();

Veri çekme
Veri çekerken de aşağıdaki gibi yapıyoruz. Veriyi çektikten sonra null-check yapmanızda fayda var.

mPreferences = PreferenceManager.getDefaultSharedPreferences(this);
String name = mPreferences.getString(USERNAME, null);
int age = mPreferences.getInt(AGE, 0);
Person personObject = new Person(name, age);

Veri silme
Veri silmek için remove() metodunun içerisine silmek istediğiniz key/value değerini silmek için metot içerisine key değerini kullanmanız yeterli. Tüm değerleri silmek isterseniz clear() metodunu kullanabilirsiniz.

mPreferences.edit()
		.remove(USERNAME)
		.remove(USERAGE)
		.commit();

Bu yapıyı daha güvenli hâliyle kullanabilmek için burdaki yazımı okuyabilirsiniz.