【Android 】SharedPreferencesでデータを保存する方法(Java編)
この記事ではシンプルなデータを保存するときに便利な SharedPreferences の使い方を紹介します。
保存できるデータは String や Int など限られていますが、ゲームのスコアなどちょっとした値を保存するのに便利な機能です。
開発環境
Sample プロジェクトを作成して、MainActivity.java にコードを書いていきます。
Android Studio | Koala | 2024.1.1 |
---|---|
minSdk | 21 |
targetSdk | 34 |
SharedPreferencesの使い方
1. ファイルの用意
まずはファイル名を strings.xml に準備しておきます(4行目)。
<resources>
<string name="app_name">Sample</string>
<string name="preference_key">"com.example.sample.PREFERENCE_KEY"</string>
</resources>
重複したファイルが作成されないように、ファイル名は「パッケージ名.ファイル名」とするのが一般的です。
ファイル名は長くなったり複数のアクティビティから使用することが多いので、strings.xml に文字列を用意しておくことをオススメします。
MainActivity.java を開いて、9行目のコードを追加します。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 省略
// 1. 用意
SharedPreferences sharedPref = getSharedPreferences(getString(R.string.preference_key), Context.MODE_PRIVATE);
}
}
1つ目の引数がファイル名で、先ほど strings.xml に用意した文字列を指定しています。
2つ目の引数は MODE_PRIVATE(プライベートモード)にしておきます。
さらに簡単に書ける場合
アクティビティが1つしかない場合、1つのアクティビティ内で1つのファイルしか使わない場合は、以下のように書くことができます。
SharedPreferences sharedPref = getPreferences(Context.MODE_PRIVATE);
2. 値を保存する
基本的な型の値を保存することができますが、ここでは String 型と int 型の値を保存してみます。
MainActivity.javaに11〜14行目のコードを追加します。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// 省略
// 1. 用意
SharedPreferences sharedPref = getSharedPreferences(getString(R.string.preference_key), Context.MODE_PRIVATE);
// 2. 保存する
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString("NAME", "山田");
editor.putInt("NUMBER", 123);
editor.apply();
}
}
キーと値をセットにして保存するので putString(“キー”, “値”) のように書きます。
値を更新するときは、同じキーを使えば上書きされます。
保存・更新・削除など SharedPreferences に変更を加えたときは、最後に apply メソッドで変更を反映させます。
editor.apply();
3. 値を取り出す
値を取り出すときは、8・9行目のように書きます。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// 省略
// 3. 取り出す
String name = sharedPref.getString("NAME", "?");
int number = sharedPref.getInt("NUMBER", 0);
}
}
getString、getInt メソッドの2つ目の引数は、値が保存されていない場合の値です。
4. 値を削除する
8行目のコードで、保存した値を全て削除することができます。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// 省略
// 4. 削除する
sharedPref.edit().clear().apply();
}
}
特定の値だけ削除する場合は remove(“キー”) と書きます。
sharedPref.edit().remove("NAME").apply();
完成コード
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_main);
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
return insets;
});
// 1. 用意
SharedPreferences sharedPref = getSharedPreferences(getString(R.string.preference_key), Context.MODE_PRIVATE);
// SharedPreferences sharedPref = getPreferences(Context.MODE_PRIVATE);
// 2. 保存する
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString("NAME", "山田");
editor.putInt("NUMBER", 123);
editor.apply();
// 3. 取り出す
String name = sharedPref.getString("NAME", "?");
int number = sharedPref.getInt("NUMBER", 0);
Log.v("MY_LOG", "---削除前---");
Log.v("MY_LOG", name);
Log.v("MY_LOG", number + "");
// 4. 削除する
sharedPref.edit().clear().apply();
// sharedPref.edit().remove("NAME").apply();
String name2 = sharedPref.getString("NAME", "?");
int number2 = sharedPref.getInt("NUMBER", 0);
Log.v("MY_LOG", "---削除後---");
Log.v("MY_LOG", name2);
Log.v("MY_LOG", number2 + "");
}
}