Android Sharedpreferences Kullanımı

Merhaba Arkadaşlar,
mobilhanem.com sitemiz üzerinden anlattığımız/yayınladığımız mobil uygulama geliştirme derslerimize Android SharedPreferences Kullanımı ile devam ediyoruz.

Uygulama yazarken bazı verileri uygulama kapatılsada saklamak isteriz. Bunun için web uygulamalarında database kullanılmaktadır. Android uygulamamızda da database kullanabiliriz. SQLite veri tabanı kullanarak uygulamamız içinde verileri saklayabiliriz. SQLite dersi için tıklayınız. Ancak veri tabanı kullanmak hem daha zahmetlidir hem de küçük datalar saklamak için gereksizdir. Bu durumlarda SharedPreferences kullanmak çok daha pratiktir.

Android Sharedpreferences Kullanımı

Gelelim nasıl kullanıldığına. SharedPreferences kullanarak string,int,boolean,float,long tipinde veriler kaydedebiliriz. Ben bu dersimde int,boolean ve string kaydetmeyi ve çekmeyi anlatacağım. Bununla ilgilide birde örnek uygulama ekleyeceğim. Uygulamamızda 2 adet Edittext ve bir adet Checkbox olacak ve buralara girdiğimiz değerleri SharedPreferences kullanarak kaydedeceğiz. Uygulamamızı kapatıp açtığımızda bu verileri görüntüleyebileceğiz.

Gelelim kod kısmına. Ben direk Activity’nin kendisini ekliyorum. Kod üzerinden gerekli açıklamaları yaptım. Sonrasında ise kayıt gerçekleştiren ve kayıtları çeken kodları ayrı ayrı ekledim dersimize.

package mobilhanem.com.mobilhanemsharedpreferences;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {
    EditText stringValueET,intValueET;
    CheckBox checkBox;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //Referanslar
        stringValueET = (EditText) findViewById(R.id.editText);
        intValueET = (EditText) findViewById(R.id.editText2);
        checkBox = (CheckBox) findViewById(R.id.checkBox);

    }

    public void onClick(View view){ //Butonlara tıklanınca

        SharedPreferences sharedPref = this.getPreferences(Context.MODE_PRIVATE);

        if(view.getId() == R.id.button){ // Kaydet Butonu
            String stringValue = stringValueET.getText().toString(); //Edittextten alınıyor
            String intValue = intValueET.getText().toString(); //Edittextten alınıyor
            boolean isChecked = checkBox.isChecked(); //Checkbox seçili isi true değilse false döner

            if(stringValue==null || stringValue.equals("") || intValue.equals("") || intValue==null){ //alınan değerlerin boş olup olmaması kontrol ediliyor

                Toast.makeText(this, "Tüm alanları doldurunuz.",Toast.LENGTH_LONG).show();

            }else{ //değerler boş değilse

                int value = Integer.parseInt(intValue); //Alınan değer Integer'a çevriliyor
                SharedPreferences.Editor editor = sharedPref.edit(); //SharedPreferences'a kayıt eklemek için editor oluşturuyoruz
                editor.putInt("intValue",value); //int değer ekleniyor
                editor.putString("stringValue",stringValue); //string değer ekleniyor
                editor.putBoolean("isChecked",isChecked); //boolean değer ekleniyor
                editor.commit(); //Kayıt
                Toast.makeText(this, "Kayıt Yapıldı.",Toast.LENGTH_LONG).show();

            }
        }else{ //Kayıtlı verileri getir butonu

            //kaydedilen veriler kaydedilen key ile geri çekiliyor.
            //Eğer o key ile eşlesen bir değer yoksa default  value cekilir
            //örneğin "stringValue" değeri ile bir kayıt yoksa savedString'e değer olarak "Kayıt yok" atanacak
            String savedString = sharedPref.getString("stringValue","Kayıt Yok");
            int savedInt = sharedPref.getInt("intValue",0);
            Boolean savedChecked = sharedPref.getBoolean("isChecked",false);

            AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
            builder.setTitle("Mobilhanem");
            if(savedString.equals("Kayıt Yok")){
                builder.setMessage("Önce Kayıt Yapınız");
            }else{ //Kayıtlı değerler yazdırılıyor
                builder.setMessage("Kayıtlı String : "+savedString+"\nKayıtlı Int : "+savedInt+"\nisChecked : "+savedChecked);
            }

            builder.setNeutralButton("TAMAM", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {

                }
            });
            builder.show();
        }
    }

}

SharedPrefrences kayıt yapmak:

  SharedPreferences sharedPref = this.getPreferences(Context.MODE_PRIVATE);
  SharedPreferences.Editor editor = sharedPref.edit(); 
  editor.putInt("intValue",value); //int değer ekleniyor
  editor.putString("stringValue",stringValue); //string değer ekleniyor
  editor.putBoolean("isChecked",isChecked); //boolean değer ekleniyor
  editor.commit(); //Kayıt

SharedPreferences kayıtları çekmek:

SharedPreferences sharedPref = this.getPreferences(Context.MODE_PRIVATE);
String savedString = sharedPref.getString("stringValue","Kayıt Yok");
int savedInt = sharedPref.getInt("intValue",0);
Boolean savedChecked = sharedPref.getBoolean("isChecked",false);

Evet arkadaşlar uygulamamızın kodlarını indirip incelerseniz daha iyi anlayabileceğinizi düşünüyorum.

Farklı Activity’lerde SharedPreferences Kullanmak

Yukarıdaki kodda kayıt ettiğimiz veriyi ancak aynı activity’de geri alabiliriz. Bir activity’de kaydettiğimiz veriyi farklı bir activity’de kullanmak istediğimizde yukarıdaki kod çalışmayacaktır. Proje bazlı Sharedpreferences kullanmak istiyorsak yukardakinden farklı olarak

SharedPreferences sharedPref = this.getPreferences(Context.MODE_PRIVATE);

yerine aşağıdaki gibi sharedPreferences objemizi yaratmalıyız ve getPreferences metfodu yerine getSharedPreferences methodunu çağırmalıyız.

SharedPreferences sharedPref = this.getSharedPreferences("sharedPref",Context.MODE_PRIVATE);

yani getPreferences yerine getSharedPreferences kullanmalıyız.

Aslında getPreference methodunu çağırdığımızda bu method kendi içinde getSharedPreferences methodunu çağırmaktadır. Tek farkı getPreference methodu kullandığımıza sharedPreference adımızı bulunduğumuz class’ın adını otomatik almakta , getSharedPreferences methodunda ise bu adı biz methoda parametre olarak geçmekteyiz. Biz örneğimizde “sharedPref” adını verdik , projemizin heryerinde bu adla geri çağırabiliriz.

Sizlerde getPreferences methodunun tanımlandığı yere giderek bu methodun içeride aşağıdaki işlemi yaptığını görebilirsiniz:

 return getSharedPreferences(getLocalClassName(), mode);

Android SharedPreferences Kullanımı dersimizde anlatmak istediklerim bu kadar. Konu ile ilgili sorularınızı konu altından sorabilirsiniz. Konu dışı sorularınızı ise http://sorucevap.mobilhanem.com sitemiz üzerinden bizlere iletebilirsiniz.

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

Görüşmek dileğiyle..

32

Taha Kırca

iOS & Android & Apple Watch Developer, Mobilhanem.com yazarı, Karadeniz Uşağu, Ordu Sevdalısı

6 Yorum

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?