Bu dersimizde gson kütüphanesinin ne olduğundan ve sharedpreference dosyasına bu kütüphane sayesinde kendi oluşturduğumuz tipteki verileri nasıl atacağımızdan bahsediyoruz.
Bildiğiniz gibi varsayılan olan bir sharedpreferences dosyasına sadece primitive tip verileri ekleyebiliyoruz. Kendi oluşturduğumuz bi sınıftaki nesneleri bu dosyaya eklememiz mümkün değil. Peki böyle bir ihtiyaç halinde ne yapacağız? Cevap gson !
Google tarafından geliştirilen Gson kütüphanesi ile Java nesnelerini json formatına, json formatındaki verileri de Java nesnelerine dönüştürebiliriz. Peki sharedpreference dosyasına veri eklerken bunu nasıl kullanacağız?
Calisan diye bir sınıfımız olduğunu düşünelim. Bu sınıftan oluşturduğumuz bir nesne veri tipi olarak Calisan’dır. Ve direk olarak sharedpreference dosyasında saklanamaz. Ama bu nesneyi gson kütüphanesini kullanarak bir json stringine dönüştürebiliriz. Bu işleme serialization denir. Sharedpreference dosyasında da string veri tipinde değerler tutuabildiği için bu string değerini bu dosyada tutabiliriz.
1 2 |
Gson gson=new Gson(); String jsonStr= gson.toJson(calisan, Calisan.class); |
Önce gson nesnesi oluştururuz. Daha sonra bu nesne ile toJson() methodu çalıştırılır. Bu method ilk olarak jsona dönüştürülecek nesneyi, daha sonra da bu nesnenin hangi tipte (hangi sınıfa ait) olduğu parametrelerini alır ve geriye json tipinde bir string döndürür. Biz de bu stringi dosyamıza putString methoduyla kaydedebiliriz.
Gson kütüphanesini projemize dahil etmek için build.gradle dosyasında dependency kısmına
compile ‘com.google.code.gson:gson:2.8.0’ yazmamız yeterlidir. İlgili kütüphane otomatik olarak indirilip projenizde kullanıma hazır olacaktır.
Bu derste yazılan kodlar aşağıda belirtilmiştir. SharedPreferencewithGson projesinin bitmiş son halini buradaki linkten indirebilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
public class MainActivity extends AppCompatActivity { private TextView tvData; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tvData= (TextView) findViewById(R.id.data); } public void saveCustomClassObject(View view) { Calisan calisan=calisanOlustur(); SharedPreferences sharedPreferences=getPreferences(MODE_PRIVATE); SharedPreferences.Editor editor=sharedPreferences.edit(); Gson gson=new Gson(); String jsonStr= gson.toJson(calisan, Calisan.class); Log.i("emre", "Save: "+jsonStr); editor.putString("calisan_key", jsonStr); editor.apply(); } public void loadCustomClassObject(View view) { } private Calisan calisanOlustur(){ Calisan calisan=new Calisan(); calisan.setIsim("Emre"); calisan.setMeslek("Mühendis"); calisan.setAktif(true); calisan.setId(150); calisan.setGorev(Arrays.asList("Yönetici", "Developer")); return calisan; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/pageLayout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="20dp" tools:context="com.example.emrealtunbilek.sharedprefereneswithgson.MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_weight="1" android:onClick="saveCustomClassObject" android:text="KAYDET"/> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="loadCustomClassObject" android:text="GETİR"/> </LinearLayout> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/data" android:layout_marginTop="40dp" android:textSize="20sp" android:layout_gravity="center" android:text="DATA" android:textStyle="bold" /> </LinearLayout> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
import java.util.List; public class Calisan { private String isim; private String meslek; private Integer id; private List<String> gorev; private Boolean aktif; public String getIsim() { return isim; } public void setIsim(String isim) { this.isim = isim; } public String getMeslek() { return meslek; } public void setMeslek(String meslek) { this.meslek = meslek; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public List<String> getGorev() { return gorev; } public void setGorev(List<String> gorev) { this.gorev = gorev; } public Boolean getAktif() { return aktif; } public void setAktif(Boolean aktif) { this.aktif = aktif; } } |