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

Sara

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

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

>> Java コードはこちら

開発環境

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

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.kt を開いて、7行目のコードを追加します。

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // 省略

        // 1. 用意
        val sharedPref = getSharedPreferences(getString(R.string.preference_key), Context.MODE_PRIVATE)
    }
}

1つ目の引数がファイル名で、先ほど strings.xml に用意した文字列を指定しています。

2つ目の引数は MODE_PRIVATE(プライベートモード)にしておきます。

さらに簡単に書ける場合

アクティビティが1つしかない場合、1つのアクティビティ内で1つのファイルしか使わない場合は、以下のように書くことができます。

val sharedPref = getPreferences(Context.MODE_PRIVATE)

2. 値を保存する

基本的な型の値を保存することができますが、ここでは String 型と int 型の値を保存してみます。

MainActivity.ktに9・10行目のコードを追加します。

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        // 省略

        // 1. 用意
        val sharedPref = getSharedPreferences(getString(R.string.preference_key), Context.MODE_PRIVATE)

        // 2. 保存する
        sharedPref.edit().putString("NAME", "山田").apply()
        sharedPref.edit().putInt("NUMBER", 123).apply()
    }
}

キーと値をセットにして保存するので putString(“キー”, “値”) のように書きます。

値を更新するときは、同じキーを使えば上書きされます。

便利な書き方

保存・更新・削除など SharedPreferences に変更を加えるときは edit() と apply() をセットで実行する必要があります。

sharedPref.edit().実行する処理.apply()

保存するデータがたくさんある場合は、スコープ関数 with を使うとコードを簡略化することができます。(6〜10行目)。

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        // 省略

        // 2. 保存する
        with(sharedPref.edit()) {
            putString("NAME", "山田")
            putInt("NUMBER", 123)
            apply()
        }
    }
}

3. 値を取り出す

値を取り出すときは、6・7行目のように書きます。

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        // 省略

        // 3. 取り出す
        val name = sharedPref.getString("NAME", "?")
        val number = sharedPref.getInt("NUMBER", 0)
    }
}

getString、getInt メソッドの2つ目の引数は、値が保存されていない場合の値です。

4. 値を削除する

6行目のコードで、保存した値を全て削除することができます。

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        // 省略

        // 4. 削除する
        sharedPref.edit().clear().apply()
}

特定の値だけ削除する場合は remove(“キー”) と書きます。

sharedPref.edit().remove("NAME").apply()

完成コード

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContentView(R.layout.activity_main)
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
            insets
        }

        // 1. 用意
        val sharedPref = getSharedPreferences(getString(R.string.preference_key), Context.MODE_PRIVATE)
        //val sharedPref = getPreferences(Context.MODE_PRIVATE)

        // 2. 保存する
        // sharedPref.edit().putString("NAME", "山田").apply()
        // sharedPref.edit().putInt("NUMBER", 123).apply()
        with(sharedPref.edit()) {
            putString("NAME", "山田")
            putInt("NUMBER", 123)
            apply()
        }

        // 3. 取り出す
        val name = sharedPref.getString("NAME", "?")
        val 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()
        
        val name2 = sharedPref.getString("NAME", "?")
        val 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をコピーしました