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..




Slack Grubumuza Üye Oldunuz mu ?

[…] 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.