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