- 13 May 2020
- 41
- 0
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 preferencesin 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.
activity_main.xml
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 .
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.
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
HomeActivity.class
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 ;
metodu ve yapılan değişikliklerin uygulanması için;
ile tutulan verileri sıfırlayarak ,
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 stackden activityi 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
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.
activity_main.xml
Kod:
<?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 .
Kod:
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.
Kod:
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
Kod:
<?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.class
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 ;
Kod:
editor.clear();
Kod:
editor.commit();
Kod:
startActivity(new Intent(HomeActivity.this,MainActivity.class));
finish();
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 stackden activityi 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
Son düzenleme: