【Android 】SharedPreferencesでデータを保存する方法(Java編)

Sara

この記事ではシンプルなデータを保存するときに便利な SharedPreferences の使い方を紹介します。

保存できるデータは String や Int など限られていますが、ゲームのスコアなどちょっとした値を保存するのに便利な機能です。

>> Kotlin コードはこちら

開発環境

Sample プロジェクトを作成して、MainActivity.java にコードを書いていきます。

Android StudioKoala | 2024.1.1
minSdk21
targetSdk34

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 + "");
    }
}
ABOUT ME
Sara
Sara
運営者
書籍やオンライン講座でプログラミングを勉強してフリーランスのプログラマーになりました。
このサイトでは「わかりやすく・シンプル」をモットーに、プログラミングの基礎からアプリ開発まで紹介します。
独学でプログラミングを勉強をしている方、基礎は勉強したけれど次に何をすれば良いか分からない...という方のお役に立てるサイトを目指しています。
主な使用言語:Java / Kotlin / PHP
>> 詳しいプロフィール
>> お問い合わせ
>> 書籍を出版しました!
本格的に学びたい方へ

Code for Fun プログラミング講座

Code for Fun プログラミング講座では、プログラミングの基礎からアプリ開発まで学ぶことができます。

わかりやすく・シンプルをモットーに

  • 同じコードを書けば必ず完成できること
  • 専門用語を使いすぎないこと

を重視しています。

POINT 01

動くコード

プログラミングの文法だけを学んでも、そこから動くアプリを開発をするのは難しいです。

Code for Fun のプログラミング講座では、ゲームやカレンダーなど「アプリとして機能するもの」を作りながらプログラミングを学ぶことができます。

POINT 02

自分のペースで

オンライン講座なので、ご自身のペースで学習を進めて頂けます。

分からないことがあっても、前のレッスンに戻ることができるので安心です。

お申し込みしたその日からからすぐに始めることができます。

POINT 03

個別サポート

プログラミング学習では、エラーが起きることはよくあります。そんな時はお気軽にお問い合わせください!

コメント欄またはメールによるサポートを回数無制限でご利用頂けます。(*講座に関連するご質問のみ対応)

今すぐ無料でお試し

記事URLをコピーしました