Bu dersimizde android persistent data yani kalıcı veri olarak kullanacağımız ilk yapı olan SharedPreference’a giriş yapıyoruz.
SharedPreference ayar ve basit bilgileri saklayacağımız bir yapıdır. Kolay bir şekilde basit verilerinizi bu yapıda saklayabilir ve kolayca geri okuyabilirsiniz. Temelde anahtar-değer (key-value) mantığıyla çalışan xml formatlı bir dosyadır. Mesela kullanıcı adı ve şifreyi bu dosyada tutmak istediğinizde dosyanıza “isim” =”emre”, “sifre”=”1234” şeklinde veri ekler ve de okumak istediğiniz verinin anahtar kelimesini yazarak ilgili değere ulaşırsınız(isim veya şifre)
Bu veri yapısını kullanıcı adı ve şifresini saklamak için, uygulama ile ilgili basit ayarları tutmak için kullanabiliriz.
Genel olarak bu yapı hakkında bilgi verelim. Bu yapıda sadece primitive data tiplerini (float, int, String, boolean) saklayabilirsiniz. Primitive olmayan yapıları bu dosyada varsayılan olarak saklayamazsınız. Kendi oluşturduğunuz bir sınıf nesnesini, bir arraylisti veya bir hashmap’i direk olarak bu dosyada saklamanız mümkün değildir.( Farklı methodlarla bu işlem de yapılabilir). Bu dosyanın iki çeşidi bulunmaktadır.
1- ActivityLevel : Bu dosyaya sadece onu oluşturan activity erişebilir. Uygulamadaki diğer activity’ler veya başka uygulamalar bu dosyaya erişemez. Böylece her activity için farklı preference dosyaları oluşturabilirsiniz. Oluşturulan dosya ilgili activity’nin adıyla oluşturulur. Bu dosyaya ulaşmak/oluşturmak için getPreference(int mode) methodu kullanılır.
2- ApplicationLevel: Eşsiz bir isim vererek tek bir sharedpreference oluşturup, uygulamadaki tüm activity’lern bu dosyaya erişimini sağlayabilirsiniz. Vereceğiniz isim için getPackageName + “.dosyaadi.txt” demeniz gerekir. Application düzeyinde bir dosya oluşturmak için kullanılan method getSharedPreference (String dosyaAdi, int mode) şeklindedir.
Bu methodlardaki mode değeri dosyanın private ya da public olmasını sağlar. Ama api 17 sonrasında tüm public flaglar deprecated olmuştur, yani kullanılmaz. Yani oluşturacağınız sharedpreference dosyası uygulama dışından erişilemez. Kullanılacak tek mode bayrak değeri MODE_PRIVATE’tır. Dosyanın başka uygulamalarca okunmasını sağlayan MODE_WORLD_READABLE, değiştirilmesini sağlayan MODE_WORLD_WRITABLE bayrakları api 17 ve sonrasındaki cihazlarda SecurityException fırlatılmasına sebep olacaktır, o yüzden kullanmamız gerekir.
Bu dersimizde sharedpreference konusu anlatılırken kullanılacak uygulamanın arayüzü tasarımı yapılmıştır. Bu kodları aşağıda bulabilirsiniz. SharedPreferenceDemo projesinin bitmiş son halini buradaki linkten indirebilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/pageLayout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="20dp" tools:context="com.example.emrealtunbilek.sharedpreferencesornek.MainActivity"> <Switch android:id="@+id/pageColorSwitch" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Yeşile Çevir "/> <EditText android:id="@+id/etName" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="74dp" android:hint="Adınızı giriniz"/> <EditText android:id="@+id/etProfession" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Mesleğinizi giriniz"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_weight="1" android:onClick="saveAccountData" android:text="KAYDET"/> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="loadAccountData" android:text="GETİR"/> </LinearLayout> <TextView android:id="@+id/txvName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginTop="30dp" android:text="Kişi Adı:" android:textColor="#969494" android:textSize="25sp" android:textStyle="bold"/> <TextView android:id="@+id/txvProfession" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="Meslek:" android:textColor="#969494" android:textSize="20sp" android:textStyle="bold"/> </LinearLayout> |