Merhabalar,
Bu yazıda Android'de Shared Preferences kullanımından bahsedeceğim. Shared Preferences ile key-value şeklinde değerleri uygulamanın yüklenmiş olduğu cihazın bünyesinde kaydedip kullanabilirsiniz. Şimdi örnek bir proje üzerinde kullanımını görelim.
Senaryomuz şu şekilde olacak; İlk olarak uygulamada Splash ekranı belirecek. 3 saniyelik bir beklemenin ardından eğer giriş yapılmadıysa Login ekranına, giriş yapıldıysa ana sayfaya geçiş yapılacak. Login ekranında kullanıcı adı ve parola istenecek. Eğer doğru bilgiler girilirse ana sayfaya geçiş yapılacak. Ana sayfada bulunan çıkış yap butonuyla da tekrardan Login ekranına dönülecek. Örnek projeyi Github üzerinden paylaştım. İndirip inceleyebilirsiniz:
İlk olarak Android Studio'da boş bir proje oluşturuyoruz. Projeyi oluştururken Activity name kısmına SplashActivity yazıyoruz. Sonrasında uygulamaya 2 adet activity (LoginActivity, MainActivity) ekliyoruz.
Splash ekranına 1 adet ImageView koyarak basit bir tasarım yapıyoruz.
activity_splash.xml:
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".SplashActivity"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" app:srcCompat="@mipmap/ic_launcher" android:id="@+id/imageView" android:layout_marginTop="8dp" app:layout_constraintTop_toTopOf="parent" android:layout_marginBottom="8dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" android:layout_marginStart="8dp" app:layout_constraintEnd_toEndOf="parent" android:layout_marginEnd="8dp"/> </android.support.constraint.ConstraintLayout>
Login ekranına 1 adet ImageView, 2 adet EditText ve 1 adet Button koyarak olabildiğince basit bir tasarım daha çıkartıyoruz.
activity_login.xml:
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".LoginActivity"> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:inputType="textPersonName" android:text="" android:hint="Kullanıcı adı" android:ems="10" android:id="@+id/etUsername" android:layout_marginStart="8dp" app:layout_constraintStart_toStartOf="parent" android:layout_marginEnd="8dp" app:layout_constraintEnd_toEndOf="parent" android:layout_marginTop="50dp" app:layout_constraintTop_toBottomOf="@+id/imageView"/> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:inputType="textPassword" android:ems="10" android:id="@+id/etPassword" android:hint="Parola" app:layout_constraintStart_toStartOf="parent" android:layout_marginStart="8dp" app:layout_constraintEnd_toEndOf="parent" android:layout_marginEnd="8dp" android:layout_marginTop="8dp" app:layout_constraintTop_toBottomOf="@+id/etUsername"/> <Button android:text="Giriş Yap" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/bLogin" app:layout_constraintStart_toStartOf="parent" android:layout_marginStart="8dp" app:layout_constraintEnd_toEndOf="parent" android:layout_marginEnd="8dp" android:layout_marginTop="50dp" app:layout_constraintTop_toBottomOf="@+id/etPassword"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" app:srcCompat="@mipmap/ic_launcher" android:id="@+id/imageView" android:layout_marginTop="50dp" app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent" android:layout_marginStart="8dp" app:layout_constraintEnd_toEndOf="parent" android:layout_marginEnd="8dp"/> </android.support.constraint.ConstraintLayout>
Ana sayfa ekranı içinde 1 adet TextView ve 1 adet Button koyarak basit tasarımın dibine vuruyoruz.
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".LoginActivity"> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:inputType="textPersonName" android:text="" android:hint="Kullanıcı adı" android:ems="10" android:id="@+id/etUsername" android:layout_marginStart="8dp" app:layout_constraintStart_toStartOf="parent" android:layout_marginEnd="8dp" app:layout_constraintEnd_toEndOf="parent" android:layout_marginTop="50dp" app:layout_constraintTop_toBottomOf="@+id/imageView"/> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:inputType="textPassword" android:ems="10" android:id="@+id/etPassword" android:hint="Parola" app:layout_constraintStart_toStartOf="parent" android:layout_marginStart="8dp" app:layout_constraintEnd_toEndOf="parent" android:layout_marginEnd="8dp" android:layout_marginTop="8dp" app:layout_constraintTop_toBottomOf="@+id/etUsername"/> <Button android:text="Giriş Yap" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/bLogin" app:layout_constraintStart_toStartOf="parent" android:layout_marginStart="8dp" app:layout_constraintEnd_toEndOf="parent" android:layout_marginEnd="8dp" android:layout_marginTop="50dp" app:layout_constraintTop_toBottomOf="@+id/etPassword"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" app:srcCompat="@mipmap/ic_launcher" android:id="@+id/imageView" android:layout_marginTop="50dp" app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent" android:layout_marginStart="8dp" app:layout_constraintEnd_toEndOf="parent" android:layout_marginEnd="8dp"/> </android.support.constraint.ConstraintLayout>
SplashActivity dosyasını açıp içeriğini şu şekilde dolduruyoruz.
SplashActivity.kt:
package com.yusufborucu.sharedpreferencessample import android.content.Context import android.content.Intent import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.os.Handler class SplashActivity : AppCompatActivity() { private var handler: Handler? = null private var delay: Long = 3000 private val runnable: Runnable = Runnable { if (!isFinishing) { val preferences = getSharedPreferences("MyApp", Context.MODE_PRIVATE) if (preferences.getBoolean("login", false)) { val intent = Intent(applicationContext, MainActivity::class.java) startActivity(intent) finish() } else { val intent = Intent(applicationContext, LoginActivity::class.java) startActivity(intent) finish() } } } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_splash) handler = Handler() handler!!.postDelayed(runnable, delay) } override fun onDestroy() { if (handler != null) { handler!!.removeCallbacks(runnable) } super.onDestroy() } }
Burada yaptığımız işlemler;
- Handler yardımıyla 3 saniyelik bir bekleme oluştur
- Shared Preferences ile kaydedilmiş olan login ifadesinin değeri true ise Intent yardımıyla ana sayfaya, false ise yine Intent yardımıyla Login ekranına geçiş yap
LoginActivity dosyasını açıp içeriğini şu şekilde dolduruyoruz.
LoginActivity.kt:
package com.yusufborucu.sharedpreferencessample import android.content.Context import android.content.Intent import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.widget.Toast import kotlinx.android.synthetic.main.activity_login.* class LoginActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_login) bLogin.setOnClickListener { val username = etUsername.text.toString() val password = etPassword.text.toString() if (username == "aliveli" && password == "123456") { val preferences = getSharedPreferences("MyApp", Context.MODE_PRIVATE) val editor = preferences.edit() editor.putBoolean("login", true) editor.apply() val intent = Intent(applicationContext, MainActivity::class.java) startActivity(intent) finish() } else { Toast.makeText(this, "Kullanıcı adı veya parola yanlış.", Toast.LENGTH_SHORT).show() } } } }
Burada yaptığımız işlemler;
- Ekranda bulunan giriş yap butonuna tıklandığında, girilen kullanıcı adı ve parolayı karşıla
- Girilen bilgiler istenilenlere eşitse Shared Preferences yardımıyla login adında bir boolean ifade oluşturup değerini true yap ve kaydet. Sonrasında da Intent yardımıyla ana sayfaya geçiş yap
- Girilen bilgiler istenilenlere eşit değilse ekranda "Kullanıcı adı veya parola yanlış." şeklinde bir uyarı göster.
MainActivity dosyasını açıp içeriğini şu şekilde dolduruyoruz.
MainActivity.kt:
package com.yusufborucu.sharedpreferencessample import android.content.Context import android.content.Intent import android.support.v7.app.AppCompatActivity import android.os.Bundle import kotlinx.android.synthetic.main.activity_main.* class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) bLogout.setOnClickListener { val preferences = getSharedPreferences("MyApp", Context.MODE_PRIVATE) val editor = preferences.edit() editor.putBoolean("login", false) editor.apply() val intent = Intent(applicationContext, LoginActivity::class.java) startActivity(intent) finish() } } }
Burada yaptığımız işlemler;
- Ekranda bulunan çıkış yap butonuna tıklandığında Shared Preferences yardımıyla login adındaki ifadenin değerini false yap
- Intent yardımıyla Login ekranına geçiş yap
Artık uygulamayı çalıştırıp test edebilirsiniz.
Umarım faydalı olmuştur.
İyi çalışmalar.
Yorumlar 2 yorum yapıldı.
Yeni Yorum