SharedPreferences ile Activityler Arası Veri Aktarmak

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();
}
});
}
}