Eğer uygulamamızda ufak veriler tutmak istiyorsak ve uygulama kapansa da bu verileri kaybetmemek istiyorsak shared preferences tam olarak da bu iş içindir. Bu yazımda shared preferences’in etkin olarak kullanıldığı login screen ; yani kullanıcı giriş ekranını tasarlayıp kodlayarak ilerleyeceğiz.
2 tane sayfamız olacak bir tanesi MainActivity. Digeride giriş yapıldıkdan sonra yönlendireceğimiz sayfa . Onu da ben HomeActivity olarak adlandıracağım. MainActivity tasarımını email ve password girişi olacak şekilde yapıyorum. Siz seçenekleri arttırabilirsiniz.
<?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:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<EditText
android:id="@+id/email"
android:layout_gravity="center"
android:layout_marginTop="150dp"
android:layout_width="300dp"
android:layout_height="50dp"
android:inputType="textPersonName"
android:hint="E-Mail"/>
<EditText
android:id="@+id/password"
android:layout_gravity="center"
android:layout_marginTop="50dp"
android:layout_width="300dp"
android:layout_height="50dp"
android:inputType="textPassword"
android:hint="Password"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/buttonLogin"
android:text="Login"
android:layout_gravity="center"
android:layout_marginTop="20dp"/>
</LinearLayout>Tasarım işlemi tamamlandı. MainActivity içerisinde tasarımda oluşan nesneleri tanıtarak devam edelim . Sonrasında ise SharedPreferences kullanımı için SharedPreferences tipinde bir nesne tanımlayarak ilerleyelim.
Tanımlanan nesneye getSharedPrefences ile bir xml dosyası tanımlayalım .
SharedPreferences sharedPreferences ;sharedPreferences = getSharedPreferences("xmlDosyaAd",MODE_PRIVATE);Ve SharedPreferences düzenleme - veri ekleme - silme işlemleri için bir editör oluşturalım.
SharedPreferences.Editor editor = sharedPreferences.edit();Sonrasında Login butonuna setOnClick vererek içerisini dolduralım.
xml içerisinde email ve password tutabilmek için xml içerisinde değişken tanımlayarak putstring ile içerisinde girilen verileri yerleştirelim. Sonrasında commit ederek HomeActivity içerisine yönlendirelim. putstring metodu tıpku hashmap gibi çalışır. Key-value değer ataması editor nesnesi ile yapılır. Login buttonu setOnClick içerisine email ve password edittexlerinden gelen değerleri value olarak alacağız. Ve sonrasında da HomeActivity sayfasına geçiş yapacağız.
Evet herşey çok güzel değil mi ? Bence değil
“Bence de değil“ dediğinizi duyar gibiyim. Sorunumuz belli. Uygulamayı kapatıp açtıkdan sonra tekrar giriş ekranı geliyor.Biz bunun yerine daha önce giriş yaptığımız için HomeScreen ekranı gelmeli. Bunu nasıl düzeltebiliriz sizce ? Hadi biraz düşünelim…Evet . Sanırım buldunuz. Email ve password için birer değişken tanımlayıp boş olup , bu değişkenleri de xml dosyasına kaydettiğimiz yerden getstring metodu ile çekersek dolu mu boş mu olduğunu anlayabiliriz
Çok mantıklı , öyleyse MainActivity içerisinde Login.setOnClick fonksiyonu üzerine tanımlama işlemlerini yapalım.String email_control = sharedPreferences.getString("email",null);
String passwordcontrol=sharedPreferences.getString("password",null);
if(email_control != null && password_control != null){
startActivity(new Intent(this,HomeActivity.class));
finish();
}Tanımlama işlemini yaptıkdan sonra sharedPreferences nesnesiyle birlikte getString metodunu kullanarak shared ile tanımladığımız xml dosyası içerisindeki “email”- “ password” keyleri içerisindeki değerleri aldık. Eğer içerisinde herhangi bir değer yok ise default olarak null atadık. Sonrasında ise xml içerisindeki keyler içerisinde null değere sahip kod var ise login ekranını atlayarak direk olarak HomeScreen ekranına gitmesini istedik.Herşey iyi güzel peki bu adam nasıl çıkış yapar ki ? Uygulamayı silsin yüklesin bizi uğraştırmasın dersek kendimize ayıp etmiş oluruz. HomeScreen içerisinde hemen bir tane çıkış yap yani logout butonu koyalım.
HomeActivity.xml
<?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:layout_width="match_parent" android:layout_height="match_parent" android orientation="vertical" tools:context=".HomeActivity"> <Button android:id="@+id/logout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="LogOut" android:layout_marginTop="300dp" android:layout_gravity="center" /> </LinearLayout>HomeActivity içerisinde koyduğumuz çıkış butonunu işlevsel hale getirmek için butonu tanıtıyoruz. Yine aynı şekilde SharedPreferences ve Editor nesnelerinden editor tanıtımı yapıyoruz.
Logout.setOnClick içerisinde verilerin sıfırlanması için ;
editor.clear();metodu ve yapılan değişikliklerin uygulanması için;
editor.commit();ve ana sayfaya dönüş yapabilmek için;
startActivity(new Intent(HomeActivity.this,MainActivity.class)); finish();
ile HomeActivity içerisinden login ekranımıza tekrar dönüş yapıyoruz.
Burada ve daha önce finish() methodu kullanmamızın sebebi kullanıcı “Back” tuşunu bastığında tekrardan HomeActivity içerisine dönmesini engellemektir. Bir anlamda stack’den activity’i yok ediyoruz.
Android - Java dilini kullanılarak sharedPreferences üzerinden nasıl login screen yapılır bunu anlatmaya çalıştım.
Kaynak kodlara erişmek isteyenler içinde github linkimi bırakıyorum Teşekkürler
https://github.com/talhasaglam153/LoginScreenSharedPrefences