Veri Kaydetmek
Birçok
Android uygulaması veri kaydetme, okuma ve yeniden yazma işlemlerini
gerçekleştirir. Bu işlem en basit haliyle onPause() anında uygulamanın son
halini kaydetmekten veri tabanı işlemeye kadar geniş bir aralıktadır. Önemli
işlemler gerçekleştiren birçok uygulama kullanıcı ayarlarını kaydetme ihtiyacı
duyarken, bazı uygulamalar büyük miktarlarda veri işler ve veri tabanı
kullanır. Bu yazımızda veri kaydetme işlemi için yapmanız gerek en temel ve
gerekli işlemleri anlatacağız. 3 farklı veri kaydetme seçeneği vardır. Bunlar;
·
SharedPreferences dosyalarında temel
anahtar-değer çiftlerini saklama,
·
Android dosya sistemine isteğe bağlı dosya
kaydetme
·
SQLite ile yönetilen veri tabanlarını kullanmak
Anahtar-Değer çiftlerini (Key-Value Sets) Kaydetmek
Görece
olarak küçük çaplı bir uygulama tasarladıysanız, bu kapsamda önemli gördüğünüz
bazı değerleri saklamak isteyebilirsiniz. Bu işlem için SharedPreferences
API kullanmalısınız. Bu nesne
anahtar-değerlere işaret eder ve sağladığı basit metotlar yardımıyla bu
değerleri yazıp okumamızı sağlar. Her SharedPreferences
bir framework tarafından yönetilir ve özel veya paylaşılabilir olabilir.
Bu ders
ile SharedPreferences
API nasıl kullanacağımızı göreceğiz.
NOT:
SharedPreferences
API sadece anahtar-değer çiftlerini yazıp okumak için kullanılır. Bu API’yi uygulamanızın
ayarlar kısmını oluşturmada kullanacağımız Preferences
API ile karıştırmayınız. Bu konuda detaylı bilgi için Settings
ve Preferences
sayfalarına bakınız.
SharedPreferences Kullanımı
Aşağıdaki
iki metottan birini kullanarak yeni bir sharedPreferences dosyası
oluşturabilirsiniz. Bunlar:
·
getSharedPreferences()
– Bu metot, isim vererek tanımladığınız çoklu Shared Preferences
dosyalarını kullanmaya ihtiyaç duyduğunuzda kullanılır. Bu metodu
Context’inizin (içeriğinizin) herhangi bir yerinde çağırıp kullanabilirsiniz.
·
getPreferences() –
Bir shared preferences dosyasına ihtiyaç duyduğunuz zaman Activity’nizde bu
metodu çağırabilirsiniz. Bu metodu kullandığınızda herhangi bir isim vermeniz
gerekmez, çünkü sistem activity’e ait varsayılan shared Preferences dosyasını
otomatik çağıracaktır.
ÖRNEK:
Aşağıdaki kod örneği bir Fragment
içerisinden çağırılmaktadır. Bu, String kaynağında tanımlanan R.string.preference_file_key tanımlanmış olan shared
preferences dosyasına erişmekte ve private modda sadece uygulamanızın
erişebileceği şekilde bu dosyayı açmaktadır.
Context context = getActivity();
SharedPreferences sharedPref = context.getSharedPreferences(
getString(R.string.preference_file_key), Context.MODE_PRIVATE);
SharedPreferences sharedPref = context.getSharedPreferences(
getString(R.string.preference_file_key), Context.MODE_PRIVATE);
Shared Preference dosyanızı adlandırdığınız zaman, seçmiş
olduğunuz ismin benzersiz olmasına dikkat ediniz. Örneğin, "com.example.myapp.PREFERENCE_FILE_KEY"
Bu
yöntemin alternatifi ise yukarıda bahsettiğimiz ve activity’e ait varsayılan
shared Preferences dosyasını çağırmaktır.
ÖRNEK:
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
UYARI:
MODE_WORLD_READABLE veya MODE_WORLD_WRITEABLE özelliğinde sharedPreferences
dosyası oluşturuyorsanız, diğer uygulamalar tarafından bu dosyanın erişilebilir
olmasın sağlarsınız. Tabii ki b dosyanın ismini bilmeleri gerekmektedir.
Shared Preferences Dosyalarına Yazmak
Bu
dosyalara yazma işlemini gerçekleştirmek için yapmanız gereken SharedPreferences.Editor
Oluşturmak ve edit() metodunu
çağırmaktır. Saklamak istediğiniz anahtar ve değerler için, putInt() veya putString()
gibi metotları kullanmalısınız. Ardından da commit()
metodu ile değişiklikleri kaydetmelisiniz.
ÖRNEK:
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPref.edit(); editor.putInt(getString(R.string.saved_high_score), newHighScore); editor.commit();
Shared Preferences Dosyalarından Okumak
Bu
dosyalardan veri okuyabilmek için, getInt() veya
getString() gibi metotları kullanarak
istediğimiz anahtar ve değer setlerini çekebiliriz. Ardından commit() metodu ile değişiklikleri kaydederiz.
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); int defaultValue = getResources().getInteger(R.string.saved_high_score_default); long highScore = sharedPref.getInt(getString(R.string.saved_high_score), defaultValue);