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.
Android SharedPreferences Kullanımı
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..
[…] Uygulama her çalıştığında belirli kontrolleri yapıyoruz. Aşağıdaki kodu incelediğinizde göreceğiniz gibi; uygulama ilk kez çalıştığında bugünün tarihi alıp sharedpreferences ile kaydediyoruz. SharedPreferences detaylı kullanım için bu dersimizi inceleyebilirsiniz. (https://www.mobilhanem.com/android-sharedpreferences-kullanimi/) […]
Müthiş ?
this.getpreferences kısmı method oluştur hatası veriyor ben mi görmüyorum acaba yoksa burası dışında bir şeyler mi yapmamız gerekiyor ?
Kodu nerede yazıyorsun , belliki bir activity içinde değilsin.
Android service içinde SharedPreferences her zaman default value dönüyor gerçek veriyi dönmüyor.
Service -> onCreate->
sharedPreferences=this.getSharedPreferences(“sharedPreferences”,Context.MODE_PRIVATE);
sharedPreferences.getInt(“valueName”,72);
Her zaman 72 dönüyor.
Kodda ikinci kere input girince bir önceki kayıt siliniyor ve onun üstüne yazıyor. kod içerisinde sadece ekleme ve okuma olduğu halde neden böyle olduğunu çözemedim.