Android SharedPreferences ve Sessions İşlemleri

Umut Ataş
4 min readApr 18, 2021

Merhaba arkadaşlar bu yazımda işinize çok yarayacak Sessions işlemleri nasıl yapılır ve buna yardımcı olacak olan SharedPreferences kullanımını ele alacağız. Asıl konumuz olan Sessions işlemlerine geçmeden Shared Preferences nedir biraz ona değinmek istiyorum.

Uygulamalarımızı yazarken bazı verilerimizi uygulama kapansa bile bir yerde tutma, saklama ihtiyacı duyabiliriz. Verinin büyüklüğüne-küçüklüğüne göre bu durum değişebilir büyük ve karmaşık veriler ile uğraşacak olursak bunun için sqlite, realmdb gibi androide özel veri tabanları mevcuttur. Ancak küçük bir kaç veri saklamaktan bahsediyorsak bahsedilen veri tabanlarını kullanmak hiç mantıklı olmayacak hatta işi zorlaştırmış bile olacağız. Bu gibi küçük verileri yönetmek ve saklamak adına yardımımıza Key-Value mantığı ile çalışan Shared Prefences koşar ve bizlere büyük bir pratiklik kazandırır. Biz ise session verileri saklayacağımız için tam olarak aranan özellikleri sağlayacaktır. Shared Prefences konusuna kısaca değindiğimize göre artık örnek uygulamamıza geçebiliriz.

Öncelikle SessionHelper sınıfımızı oluşturuyoruz. Shared Prefences tanımlamalarımızı ve çağırmak istediğimiz fonksiyonları burada tanımlıyoruz. Sonrasında yapıcı bir fonksiyon kuruyoruz.

public class SessionHelper {

SharedPreferences pref;
SharedPreferences.Editor editor;
Context _context;
int PRIVATE_MODE = 0;
private static final String PREF_NAME = "SharedPreferencesLogin";
private static final String IS_LOGIN = "IsLoggedIn";


public static final String KEY_EMAIL = "okuyucuKodu";
public static final String KEY_VERSION = "version";
public static final String KEY_SIFRE = "sifre";
public static final String TIMED_OUT = "timedOut";
public static final String IMAGE = "resimVarmi";

public SessionHelper(Context context) {

this._context = context;
pref = _context.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
editor = pref.edit();
}

Bu örneğimizde, kullanıcı oturum açma işlemini email, version ve sifre bilgileri ile gerçekleştiriyor. Kullanıcımızın girdiği bilgileri servisimizden veya sizin belirlediğiniz giriş bilgileri ile uyuşma sağladığı zaman login ekranına düşmeden işlem sayfasına geçmesini sağlayacağız. Bu nedenle login session’ u oluşturmak için gelen verileri kayıt etmek adına aşağıdaki gibi creatLoginSession fonksiyonu yazıyoruz.

public void createLoginSession(String email, String sifre, String version) {

editor.putBoolean(IS_LOGIN, true);
editor.putString(KEY_EMAIL, email);
editor.putString(KEY_VERSION, version);
editor.putString(KEY_SIFRE, sifre);

editor.commit();
}

Sonraki aşamamız ise kullanıcı oturum açıp açmadığını kontrol etmek adına checklogin fonksiyonu tanımlamak olacak. Burada eğer return False ise girilmemesi gereken sayfadan çıkartmak, return True ise girmesine izin vermek olacaktır.

public void checkLogin() {

if(!this.isLoggedIn()) {

Intent i = new Intent(_context, LoginActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
_context.startActivity(i);
}
}

Depolanan verileri çağırma işlemini HashMap metodu ile çağıracağım. Dönen değerin HashMap olduğu bir fonksiyon yazıyoruz.

Burada IMAGE ve TIMED_OUT değişkenleri dikkatinizi çekmiş olabilir ben kodlarımda image ve belirli bir süre sonra sistemden otomatik atma işlemlerini gerçekleştirdiğim için varlar. Silmeme sebebim ise bir sonraki yazımda sizlerle belirli bir süre sonra timeout olma işlemini yazıyor olacağım.

public HashMap getUserDetails() {

HashMap user = new HashMap();
user.put(KEY_EMAIL, pref.getString(KEY_EMAIL, null));
user.put(KEY_VERSION, pref.getString(KEY_VERSION, null));
user.put(KEY_SIFRE, pref.getString(KEY_SIFRE, null));
user.put(TIMED_OUT, pref.getString(TIMED_OUT,null));
user.put(IMAGE, pref.getString(IMAGE,null));
return user;
}

Tabi ki sistemden çıkış yapıldığı zaman paylaşılan ve kaydedilen tüm verileri temizlememiz gereklidir. Bunu gerçekleştirmek adına logoutUser adında bir fonksiyon yazıyoruz ve kullanıcı oturum kapatmak istediği yerde bu fonksiyonumuzu çağırıyoruz.

public void logoutUser() {

editor.clear();
editor.commit();

Intent i = new Intent(_context, LoginActivity.class);

i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

_context.startActivity(i);
}

Evet arkadaşlar kodumuzun nihai haline gelmiş olduk. Son halini aşağıda sizlerle paylaşıyor olacağım. Ancak geri kalan kısmını sizlerin tamamlamasından yanayım hem algoritmik zekanızın gelişmesi hem de kod kabiliyeti açısından sizlere bırakıyorum. Ancak kısaca yapmanız gerekeni anlatacak olursam bir login ekranı yapın, daha sonra kişiden email, şifre ve version numarasını alın ve bunları createLoginSession’ a gönderin küçük bir if() şartı ile değerleriniz sağlanıyor ise buraya kaydedin ve bir sonraki işlem sayfasında HashMap get() yardımıyla bunları kıyaslayarak işlemin başarılı veya başarısız olduğuna karar verdiren bir yapı kurun.

public class SessionHelper {


SharedPreferences pref;
SharedPreferences.Editor editor;
Context _context;
int PRIVATE_MODE = 0;
private static final String PREF_NAME = "SharedPreferencesLogin";
private static final String IS_LOGIN = "IsLoggedIn";


public static final String KEY_EMAIL = "okuyucuKodu";
public static final String KEY_VERSION = "version";
public static final String KEY_SIFRE = "sifre";
public static final String TIMED_OUT = "timedOut";
public static final String IMAGE = "resimVarmi";

public SessionHelper(Context context) {

this._context = context;
pref = _context.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
editor = pref.edit();
}


public void createLoginSession(String email, String sifre, String version) {

editor.putBoolean(IS_LOGIN, true);
editor.putString(KEY_EMAIL, email);
editor.putString(KEY_VERSION, version);
editor.putString(KEY_SIFRE, sifre);

editor.commit();
}

public void creatTimeOut(String timeOut) {
editor.putString(TIMED_OUT, timeOut);
editor.commit();
}

public void requestImage(String resimVarmi){
editor.putString(IMAGE, resimVarmi);
editor.commit();
}


public void checkLogin() {

if(!this.isLoggedIn()) {

Intent i = new Intent(_context, LoginActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
_context.startActivity(i);
}
}


public HashMap getUserDetails() {

HashMap user = new HashMap();
user.put(KEY_EMAIL, pref.getString(KEY_EMAIL, null));
user.put(KEY_VERSION, pref.getString(KEY_VERSION, null));
user.put(KEY_SIFRE, pref.getString(KEY_SIFRE, null));
user.put(TIMED_OUT, pref.getString(TIMED_OUT,null));
user.put(IMAGE, pref.getString(IMAGE,null));
return user;
}


public void logoutUser() {

editor.clear();
editor.commit();

Intent i = new Intent(_context, LoginActivity.class);

i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

_context.startActivity(i);
}


public boolean isLoggedIn() {

return pref.getBoolean(IS_LOGIN, false);
}

}

Bugünlük bu kadar arkadaşlar aslında çok önemli bir konuyu konuşmuş ve gerçekleştirmiş olduk. Umarım yardımcı olabilmişimdir. Haftaya söz verdiğim gibi session işleminden sonra nasıl timeout yapısı kurarız konusunu anlatıyor olacağım. Herkese iyi çalışmalar, iyi günler dilerim.

--

--

Umut Ataş
Umut Ataş

Written by Umut Ataş

FLUTTER AND ANDROID DEVELOPER

No responses yet