SharedPreferences, veritabanı gerektirmeyen küçük verilerin anahtar-değer (key-value) ilişkisine göre tutulmasına, gerektiğinde istenilen yerden çağrılmasına, güncellenebilmesine ya da silinebilmesine yarayan bir android sınıfıdır.
Bu sınıfı kullanarak iki aktivity arasında veri aktarımı gerçekleştiren örneğime ait kodları inceleyebilirsiniz. Örnekte iki java sınıfı (MainActivity ve SecondActivity) ve iki layout (activity_main ve activity_second) bulunmaktadır. Amaç KAZANDINIZ tıklanıldığında level bilgisinin artması, KAYBETTİNİZ tıklanıldığında Level bilgisinin varsayılan değer olarak 1 olmasıdır.
activity_main
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="248dp"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/btn_one"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="64dp"
android:text="İKİNCİYE GİT"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textview" />
</androidx.constraintlayout.widget.ConstraintLayout>
activity_second
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SecondActivity">
<Button
android:id="@+id/btn_win"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="KAZANDINIZ"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/btn_gameover"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.499" />
<Button
android:id="@+id/btn_gameover"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="KAYBETTİNİZ"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/btn_win"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.499" />
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity
package com.example.sharedpreferences; import androidx.appcompat.app.AppCompatActivity; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class MainActivity extends AppCompatActivity { private TextView textview; SharedPreferences sp; private int level; private Button btn_one; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textview = findViewById(R.id.textview); btn_one = findViewById(R.id.btn_one); sp=getSharedPreferences("com.example.sharedpreferences", Context.MODE_PRIVATE); level = sp.getInt("level", 1); textview.setText(String.valueOf("Level : "+ level)); btn_one.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(MainActivity.this, SecondActivity.class)); } }); } }
SecondActivity
package com.example.sharedpreferences;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class SecondActivity extends AppCompatActivity {
private Button btn_win, btn_gameover;
SharedPreferences sp;
int level;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
btn_win = findViewById(R.id.btn_win);
btn_gameover = findViewById(R.id.btn_gameover);
sp=getSharedPreferences("com.example.sharedpreferences", Context.MODE_PRIVATE); //tırnak içi proje adına uygun olarak değiştirilmeli
level = sp.getInt("level", 1); //level değişkeni için varsayılan değer olarak 1 atandı
btn_win.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
++level; //kazandınız tıklanıldığında level değerini artırıp gönderme tercih edildi.
sp.edit().putInt("level",level).apply();
startActivity(new Intent(SecondActivity.this, MainActivity.class));
finish();
}
});
btn_gameover.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sp.edit().remove("level").apply(); //kaybettiniz tıklanıldığında sharedpreferences kayıtları siliniyor.
startActivity(new Intent(SecondActivity.this, MainActivity.class));
finish();
}
});
}
}