Android Programlama Ders 36‘da örnek projeyi kullanarak verileri kaydetmeyi öğreneceğiz.
Android işletim sisteminde verileri depolamak için birkaç farklı yöntem mevcuttur.
Preferences – Windows‘ta olan INI dosyalarına benzetebiliriz.
SQLite – veri tabanı ve tablolar.
Normal dosyalar – içerideki ve dışarıdaki (SD kart) üzerinde olan dosyalar.
Biz en basit (Preferences) olandan başlayacağız. Preferences üzerinde değerler çift (isim ve değer) olarak kaydediliyor, Intent’e extras gibi. Bir proje oluşturalım. Projede bir tane giriş alanı ve iki tane buton olacak. Birincisi Save (kaydet) ve ikincisi de Load (yükle) olarak belirlenecek.
Projeyi oluşturalım:
- Project name: P0036_SharedPreferences
- Build Target: Android 4.2
- Application name: SharedPreferences
- Package name: tr.example. sharedpreferences
- Create Activity: MainActivity
Main.xml’i açalım ve ekranı oluşturalım:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <EditText android:id="@+id/etText" android:layout_width="match_parent" android:layout_height="wrap_content"> <requestFocus> </requestFocus> </EditText> <LinearLayout android:id="@+id/linearLayout1" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/btnSave" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Save"> </Button> <Button android:id="@+id/btnLoad" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Load"> </Button> </LinearLayout> </LinearLayout>
Giriş alanı ve iki tane butonu içeriyor.
MainActivity.java oluşturalım:
import android.app.Activity; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity implements OnClickListener { EditText etText; Button btnSave, btnLoad; SharedPreferences sPref; final String SAVED_TEXT = "saved_text"; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); etText = (EditText) findViewById(R.id.etText); btnSave = (Button) findViewById(R.id.btnSave); btnSave.setOnClickListener(this); btnLoad = (Button) findViewById(R.id.btnLoad); btnLoad.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btnSave: saveText(); break; case R.id.btnLoad: loadText(); break; default: break; } } void saveText() { sPref = getPreferences(MODE_PRIVATE); Editor ed = sPref.edit(); ed.putString(SAVED_TEXT, etText.getText().toString()); ed.commit(); Toast.makeText(this, "Text saved", Toast.LENGTH_SHORT).show(); } void loadText() { sPref = getPreferences(MODE_PRIVATE); String savedText = sPref.getString(SAVED_TEXT, ""); etText.setText(savedText); Toast.makeText(this, "Text loaded", Toast.LENGTH_SHORT).show(); } }
saveText – veri saklama. getPreferences metodu kullanarak SharedPreferences klasından sPref nesneyi alıyoruz. Bu nesne veriyle çalışma (okuma ve yazma) imkanı sunacaktır. MODE_PRIVATE – bir sabittir ve verilere erişimi sağlamak için kullanılıyor. Verileri kaydettikten sonra bu verileri sadece bu uygulama kullanabilecektir. Verileri düzenlemek için Editor nesnesi kullanıyoruz. Bu nesneyi sPref’ten alıyoruz. putString metoduna değişkenin ismi (SAVED_TEXT) ve etText alanının değerini belirtiyoruz. Verileri kaydetmek için commit komutu kullanmalıyız. Verileri kaydettikten sonra ekrana mesajı göndereceğiz.
loadText – verileri yükle. saveText ki gibi getPreferences metodu kullanarak SharedPreferences klasından sPref nesneyi alıyoruz. MODE_PRIVATE yine kullanıyoruz ama bu sefer sadece verileri yazmak için. Burada Editor’ü kullanmıyoruz çünkü verileri sadece okuyacağız.Verileri okumak için getString metodu kullanıyoruz. Parametre olarak ismi ve değeri (varsayılan boş satırı kullanılıyor) kullanılıyor. Sonraki aşamada etText alanına değeri yazdırıyoruz ve verilerin başarıyla okunduğu mesajını veriyoruz.
Projeyi kaydedelim ve çalıştıralım.
Giriş alanına bir şey yazalım ve Save butonuna basmadan Back butonuna basalım.
Uygulamayı tekrar çalıştıralım giriş alanı boş olduğunu görüyoruz. Load butonuna basıldığı zaman bir şey olmuyor. Çünkü biz bir şey kaydetmedik.
Şimdi kaydedelim ve uygulamayı kapatalım.
Uygulamayı tekrar açalım ve Load butonuna basalım, giriş alanında bizim kaydettiğimiz veriyi görebiliriz.
Şimdi programı biraz değişelim. Program verinin kaydetmesi ve yazdırmasını otomatik (butonlara basmadan) yapsın. Bunu yapmak için loadText metodu onCreate çağıracağız.
public void onCreate(Bundle savedInstanceState) { ... btnLoad = (Button) findViewById(R.id.btnLoad); btnLoad.setOnClickListener(this); loadText(); }
Ve saveText – onDestroy metodunda.
@Override protected void onDestroy() { saveText(); super.onDestroy(); }
Kaydedelim ve çalıştıralım. Şimdi verileri girdikten sonra uygulamayı kapatabiliriz. Verilerimiz otomatik olarak sistemde kaydediliyor. Tabii Save ve Load butonları da çalışıyor.
MainActivity.java dosyasının tam kodu:
import android.app.Activity; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity implements OnClickListener { EditText etText; Button btnSave, btnLoad; SharedPreferences sPref; final String SAVED_TEXT = "saved_text"; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); etText = (EditText) findViewById(R.id.etText); btnSave = (Button) findViewById(R.id.btnSave); btnSave.setOnClickListener(this); btnLoad = (Button) findViewById(R.id.btnLoad); btnLoad.setOnClickListener(this); loadText(); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btnSave: saveText(); break; case R.id.btnLoad: loadText(); break; default: break; } } void saveText() { sPref = getPreferences(MODE_PRIVATE); Editor ed = sPref.edit(); ed.putString(SAVED_TEXT, etText.getText().toString()); ed.commit(); Toast.makeText(this, "Text saved", Toast.LENGTH_SHORT).show(); } void loadText() { sPref = getPreferences(MODE_PRIVATE); String savedText = sPref.getString(SAVED_TEXT, ""); etText.setText(savedText); Toast.makeText(this, "Text loaded", Toast.LENGTH_SHORT).show(); } @Override protected void onDestroy() { saveText(); super.onDestroy(); } }
Ders Sonu Notları:
Bu derste Preferences kullanarak verileri kaydetmeyi öğrendik. Gelecek derslerimizde aynı şeyi SQLite kullanarak yapacağız.