Site icon Mobilhanem

Android SharedPreferences Kullanarak Login Ekran Yapımı

Merhaba arkadaşlar uzun bir aranın ardından tekrar yazmaya başladım.İnşallah bundan sonra daha sık yazıp siteyi daha aktif hale getirmeye çalışacam. Bu dersimizde Android üzerinde SharedPreferences kullanımını anlatacağım.Her zamanki gibi ufak bir uygalama üzerinde anlatmaya çalışacağım.Öncelikle SharedPreferences nedir,ne işe yarar ve niçin kullanılır bunlardan bahsedeceğim.

Eğer uygulamamızda ufak veriler tutmak istiyorsak ve en önemlisi bu verileri uygulama kapansada kaybetmek istemiyorsak sharedpreferences tam bizim işimize yarayan HashMap yapısına(key-value) benzeyen bir yapıdır. Ufak veriler için database kullanmak pek mantıklı değildir. Aynı şekilde büyük veriler içinde sharedpreferences kullanmak mantıklı değildir. Sharedpreference içinde primitive(string,int,boolean,float,long) data tipinde veriler tutulabilir ve dediğim gibi bu veriler uygulama kapansada kaybolmaz.

Nasıl yaptığını merak ediyorsanız kısaca şöyle açıklayayım. Sizin kaydettiğiniz verileri bir XML dosyasına yazar ve oradan geri çeker. İOS ta NSUserDefault ve Plist bu yapıdadır.Veriyi key-value tipinde tutar.

Arkadaşlar şimdi uygulamamıza geçelim. Uygulamamız üç aktivity den oluşuyor. Login ekranı ,kayıt ekranı ve anasayfa dan oluşuyor.Kayıt olan bir kişinin verileri sharedPreferences a kaydediliyor. Uygulamadan çıkış yapmadan home yada back tuşuyla çıkarsa sharedPreferences verileri tuttuğu için bir dahaki girişinde Login ekranında veriler istenmiyor ve diren anasayfaya yönlendiriliyor. Uygulamada iki tane çıkış butonu var birincisi sharedPreferences değerlerini silmeden sadece login değerini true false yapıyor ve aynı kayıt bilgileriyle bir daha uygulamaya girmesi sağlanıyor.İkinci çıkış butonu ise tüm verileri siliyor ve tekrardan kayıt olmasını istiyor.

Gerekli açıklamaları kod üzerinde yapmaya çalıştım.

[wpdm_file id=9]

Login Ekranı:

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;


public class LoginSayfa extends Activity {
	Button kayit,giris;
	EditText mail,sifre;
	String mail_string,sifre_string;
	SharedPreferences preferences;//preferences referansı
	SharedPreferences.Editor editor; //preferences editor nesnesi referansı .prefernces nesnesine veri ekleyip cıkarmak için

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.login_sayfa);
		preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());//preferences objesi
		editor = preferences.edit(); //aynı şekil editor nesnesi oluşturuluyor

		
		//Burda sharedPreferencas üzerine kayıtlı login değerini alıyoruz.
		//Login değeri doğru giriş yapıldığında veya kayıt olduğunda true olarak kaydedilir
		//Amacı ise kullanıcı uygulamadan cıkarken direk çıkıs demeden cıktıysa yanı direk home veya back tusuyla uygulamadan çıktıysa
		//Geri geldiğinde tekrar giriş bilgilerini istemeden anasayfaya yönlendiriyoruz
		//Bu değer ancak anasayfa üzerinde cıkış butonuna basılırsa diğer bilgiler silinmeden bu değer false yapılır
		//ve uygulamaya tekrar girildiğinde kayıt olurken kullandığı şifre ve emaili ister
		if(preferences.getBoolean("login", false)){
			Intent i = new Intent(getApplicationContext(),Anasayfa.class);
    		startActivity(i);
    		finish();
		}
		
		
		mail = (EditText)findViewById(R.id.editText1);
		sifre = (EditText)findViewById(R.id.editText2); 
		
		kayit = (Button) findViewById(R.id.button1);
		kayit.setOnClickListener(new View.OnClickListener() {//kayıt ekranı açılır
			
			@Override
			public void onClick(View v) {
				Intent i = new Intent(getApplicationContext(),Kayit.class);
        		startActivity(i);
			}
		});
		
		giris = (Button) findViewById(R.id.button2);
		giris.setOnClickListener(new View.OnClickListener() {//giriş butonu tıklandığı zaman
			
			@Override
			public void onClick(View v) {
				mail_string = mail.getText().toString();
				sifre_string = sifre.getText().toString();
				
				if(mail_string.matches("") || sifre_string.matches("")){//bilgiler eksik   ise
					
					AlertDialog.Builder alertDialog = new AlertDialog.Builder(LoginSayfa.this);
        	        alertDialog.setTitle("Uyar˝");
        	        alertDialog.setMessage("Eksiksiz Doldurunz!");
        	        alertDialog.setPositiveButton("Tamam", new DialogInterface.OnClickListener() {
        	            public void onClick(DialogInterface dialog,int which) {
        	            	
        	            }
        	        });
        	        alertDialog.show();
				}else{//Bilgiler doğru ise
					
					String email = preferences.getString("email", "");//preferences objesinden kaydettiğimiz değerleri key leri ile geri alıyoruz
					String sifre = preferences.getString("sifre", "");//preferences objesinden kaydettiğimiz değerleri key leri ile geri alıyoruz
					
					if(email.matches(mail_string) && sifre.matches(sifre_string)){//edittextlerden alınan şifre ve mail değerleri shared preferencesdan alınan değerlerle eşleşiyorsa
						
						//Giriş başarılı ise sharedpreferences login değerini true yapıyoruz.
						editor.putBoolean("login", true); 
						Intent i = new Intent(getApplicationContext(),Anasayfa.class);//Anasayfa aktivity si açılır
		        		startActivity(i);
		        		finish();
					}else{//şifre ve mail uyuşmuyorsa hata bastırılır
						AlertDialog.Builder alertDialog = new AlertDialog.Builder(LoginSayfa.this);
	        	        alertDialog.setTitle("Hata");
	        	        alertDialog.setMessage("Mailiniz veya Şifreniz Uyuşmuyor!");
	        	        alertDialog.setPositiveButton("Tamam", new DialogInterface.OnClickListener() {
	        	            public void onClick(DialogInterface dialog,int which) {
	        	            	
	        	            }
	        	        });
	        	        alertDialog.show();
					}
				}
			}
		});
	}

}

Kayıt Ekranı:


import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class Kayit extends Activity{

	Button kayit_ol;
	EditText isim,email,sifre;
	String isim_string,email_string,sifre_string;
	SharedPreferences preferences; //preferences nesne referansı
	SharedPreferences.Editor editor; //preferences editor nesnesi referansı .prefernces nesnesine veri ekleyip cıkarmak için
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.kayit);

		kayit_ol = (Button) findViewById(R.id.button1);
		isim = (EditText)findViewById(R.id.editText1);
		email = (EditText)findViewById(R.id.editText2);
		sifre = (EditText)findViewById(R.id.editText3);
		
		
		kayit_ol.setOnClickListener(new View.OnClickListener() {//Kayıt ol butonu tıklanınca
			
			@Override
			public void onClick(View v) {
				isim_string = isim.getText().toString();
				email_string = email.getText().toString();
				sifre_string = sifre.getText().toString();
				if(isim_string.matches("") || email_string.matches("") || sifre_string.matches("")){//Veriler Boş  ise
					
					AlertDialog.Builder alertDialog = new AlertDialog.Builder(Kayit.this);
        	        alertDialog.setTitle("Uyarı");
        	        alertDialog.setMessage("Eksiksiz Doldurunz!");
        	        alertDialog.setPositiveButton("Tamam", new DialogInterface.OnClickListener() {
        	            public void onClick(DialogInterface dialog,int which) {
        	            	
        	            }
        	        });
        	        alertDialog.show();
				}else{//veriler boş değilse kayıt işlemine geçilir
					
					preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());//preferences nesnesi oluşturuluyor ve prefernces referansına bağlanıyor
					editor = preferences.edit(); //aynı şekil editor nesnesi oluşturuluyor
					
					
					editor.putString("isim", isim_string); //isim değeri 
					editor.putString("email", email_string);//email değeri
					editor.putString("sifre", sifre_string);//şifre değeri
					editor.putBoolean("login", true);//uygulamaya tekrar girdiğinde kontrol için kullanılcak
					//editor.putInt("sayısalDeger", 1000);// uygulamamızda kullanılmıyor ama göstermek amacıyla
					
					editor.commit();//yapılan değişiklikler kaydedilmesi için editor nesnesinin commit() metodu çağırılır.
					//Değerlerimizi sharedPreferences a kaydettik.Artık bu bilgiler ile giriş yapabiliriz.
					Intent i = new Intent(getApplicationContext(),Anasayfa.class);
	        		startActivity(i);
	        		finish();
				}
				
			}
		});
	}
}

Anasayfa Ekranı

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.View;
import android.widget.Button;

public class Anasayfa extends Activity {
	Button cikis,kayit_sil_cikis;
	SharedPreferences preferences; //preferences nesne referansı
	SharedPreferences.Editor editor; //preferences editor nesnesi referansı .prefernces nesnesine veri ekleyip cıkarmak için
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.anasayfa);

		preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());//preferences nesnesi oluşturuluyor ve prefernces referansına bağlanıyor
		editor = preferences.edit(); //aynı şekil editor nesnesi oluşturuluyor
		
		cikis = (Button) findViewById(R.id.button1);
		cikis.setOnClickListener(new View.OnClickListener() {//çıkış butonu tıklanınca 
			
			@Override
			public void onClick(View v) {
				AlertDialog.Builder alertDialog = new AlertDialog.Builder(Anasayfa.this);//Bilgi alert ediliyor
    	        alertDialog.setTitle("Bilgi");
    	        alertDialog.setMessage("Çıkış Yaptıktan Sonra Aynı Bilgilerle Giriş Yapabilirsiniz");
    	        alertDialog.setPositiveButton("Tamam", new DialogInterface.OnClickListener() {
    	            public void onClick(DialogInterface dialog,int which) {
    	            	//Burdaki amaç çıkış butonu ile kullanıcı bilgilerini silmeden çıkış yapmaktır.
    	            	//Kullanıcı bilgileri silinmeyip sharedpreference üzerinde tutulduğu için aynı bilgilerie tekrardan giriş yapılabilir.
    	            	//login değerini değiştirerek cıkıs yaptığı için değeri false yapıyoruz.
    	            	
    	            	editor.putBoolean("login", false);//uygulamaya tekrar girdiğinde kontrol için kullanılcak
    	            	editor.commit();
    	            	Intent i = new Intent(getApplicationContext(),LoginSayfa.class);
    	        		startActivity(i);
    	        		finish();

    	            }
    	        });
    	        alertDialog.show();
				
			}
		});
		
		kayit_sil_cikis = (Button) findViewById(R.id.button2);
		kayit_sil_cikis.setOnClickListener(new View.OnClickListener() {//SharedPreferences değerlerini  tamamen siler
			
			@Override
			public void onClick(View v) {
				AlertDialog.Builder alertDialog = new AlertDialog.Builder(Anasayfa.this);
    	        alertDialog.setTitle("Bilgi");
    	        alertDialog.setMessage("Kayıt Bilgileriniz Tamamen Silinecek.Tekrar Kayıt Olmanız Gerekecek ");
    	        alertDialog.setPositiveButton("Tamam", new DialogInterface.OnClickListener() {
    	            public void onClick(DialogInterface dialog,int which) {
    	            	
    	            	//Burda değerlerin hepsi silindiği için tekrardan uygulamaya giriş yapabilmesi için kayıt olmalıdır
    	            	editor.clear();//sharedpreferences değerlerinn hepsini siler
    	            	editor.commit();
    	            	
    	            	Intent i = new Intent(getApplicationContext(),LoginSayfa.class);
    	        		startActivity(i);
    	        		finish();
    	            }
    	        });
    	        alertDialog.show();
				
			}
		});
	}
}

Arkadaşlar kodu daha iyi anlayabilmek için source kodu indirin ve çalışma mantığına bakın.

Bu dersimde anlatmak istediklerim bu kadar. Birdahaki dersimizde Android Service kullanımı hakkında bilgi vermeye çalışacağım ve ufak bir uygulama yazacağım .

Bu ders hakkında sormak istediğiniz bir şey olursa çekinmeden sorabilirsiniz. Elimden geldiğince yardım ederim. Tekrardan görüşmek dileğiyle kendinize iyi bakın.

Tüm Android Ders, Proje ve Kaynak Kodlar için tıklayınız.

[wpdm_file id=9] 1
Exit mobile version