Android
 Computer >> コンピューター >  >> プログラミング >> Android

【Android】SharedPreferencesで値を保存・読み取り・編集する方法を徹底解説

SharedPreferencesとは?

SharedPreferencesは、Androidアプリでキーと値(Key-Value)のペア形式の小さなデータを永続的に保存するための仕組みです。ユーザー名やメールアドレスなどの設定情報、ログイン状態、前回起動時の状態など、SQLiteデータベースを用意するまでもない軽量なデータの保存に最適で、多くのアプリで広く利用されています。

本記事では、実際に動作するサンプルコードをもとに、SharedPreferencesで値を「保存」「読み取り」「編集(クリア)」する方法をステップごとに解説します。

ステップ1:新規プロジェクトを作成する

Android Studioを起動し、「File」→「New Project」を選択して、必要事項を入力のうえ新しいプロジェクトを作成しましょう。

ステップ2:レイアウトファイル(activity_main.xml)を編集する

res/layout/activity_main.xml に以下のコードを記述します。「Name」と「Email」の2つの入力欄(EditText)と、「Save(保存)」「Read(読み取り)」「Clear(クリア)」の3つのボタンを配置しています。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="8dp"
    tools:context=".MainActivity">
    <Button
        android:id="@+id/btnSave"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_centerInParent="true"
        android:onClick="Save"
        android:text="Save" />
    <Button
        android:id="@+id/btnRetrieve"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:layout_centerHorizontal="true"
        android:onClick="Get"
        android:text="Read" />
    <Button
        android:id="@+id/btnClear"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_centerInParent="true"
        android:onClick="clear"
        android:text="Clear" />
    <EditText
        android:id="@+id/etEmail"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/etName"
        android:layout_alignParentEnd="true"
        android:layout_marginTop="10dp"
        android:ems="10"
        android:hint="Email"
        android:inputType="textEmailAddress" />
    <EditText
        android:id="@+id/etName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignStart="@+id/etEmail"
        android:layout_marginTop="40dp"
        android:ems="10"
        android:hint="Name"
        android:inputType="text" />
</RelativeLayout>

ステップ3:MainActivity.javaを実装する

src/MainActivity.java に以下のコードを記述します。

package app.com.sample;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
    EditText editTextName, editTextEmail;
    public static final String mypreference = "mypref";
    public static final String Name = "nameKey";
    public static final String Email = "emailKey";
    SharedPreferences sharedpreferences;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editTextEmail = findViewById(R.id.etEmail);
        editTextName = findViewById(R.id.etName);
        sharedpreferences = getSharedPreferences(mypreference,
        Context.MODE_PRIVATE);
        if (sharedpreferences.contains(Name)) {
            editTextName.setText(sharedpreferences.getString(Name, ""));
        }
        if (sharedpreferences.contains(Email)) {
            editTextEmail.setText(sharedpreferences.getString(Email, ""));
        }
    }
    public void Save(View view) {
        String strName = editTextName.getText().toString();
        String strEmail = editTextEmail.getText().toString();
        SharedPreferences.Editor editor = sharedpreferences.edit();
        editor.putString(Name, strName);
        editor.putString(Email, strEmail);
        editor.apply();
        Toast.makeText(getApplicationContext(), "Saved", Toast.LENGTH_SHORT).show();
    }
    public void clear(View view) {
        editTextName = findViewById(R.id.etName);
        editTextEmail = findViewById(R.id.etEmail);
        editTextName.setText("");
        editTextEmail.setText("");
        Toast.makeText(getApplicationContext(), "Cleared",
        Toast.LENGTH_SHORT).show();
    }
    public void Get(View view) {
        editTextName = findViewById(R.id.etName);
        editTextEmail = findViewById(R.id.etEmail);
        sharedpreferences = getSharedPreferences(mypreference, Context.MODE_PRIVATE);
        if (sharedpreferences.contains(Name)) {
            editTextName.setText(sharedpreferences.getString(Name, ""));
        }
        if (sharedpreferences.contains(Email)) {
            editTextEmail.setText(sharedpreferences.getString(Email, ""));
        }
        Toast.makeText(getApplicationContext(), "Retrieved", Toast.LENGTH_SHORT).show();
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }
}

実装のポイントは以下の通りです。

  • 保存: getSharedPreferences() でインスタンスを取得し、edit() でEditorを取得、putString() で値をセットして apply() で反映させます。
  • 読み取り: getString("キー名", デフォルト値) で保存された値を取得できます。contains() を使えば、指定したキーが存在するかを事前にチェック可能です。
  • クリア: サンプルでは入力欄を空にしています。保存済みデータ自体を削除したい場合は editor.remove(キー名) や editor.clear() を使用します。

ステップ4:AndroidManifest.xmlを確認する

androidManifest.xml には以下のコードを記述します。SharedPreferencesの利用に特別なパーミッションは不要のため、標準的なマニフェスト定義だけで動作します。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="app.com.sample">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

アプリを実行して動作を確認しよう

それでは、作成したアプリを実行してみましょう。ここでは実機のAndroidスマートフォンをパソコンに接続しているものとして説明を進めます。Android Studioでプロジェクト内のアクティビティファイルを開き、ツールバーの「Run」アイコンをクリックしてください。デバイス選択ダイアログで接続したスマートフォンを選択すると、端末に以下のような画面が表示されます。

【Android】SharedPreferencesで値を保存・読み取り・編集する方法を徹底解説

【Android】SharedPreferencesで値を保存・読み取り・編集する方法を徹底解説

  1. Androidスマホ・タブレットでPCのマウスとキーボードを使う方法【DeskDock完全ガイド】

    スマートフォンやタブレットでは、どうも作業がはかどらない——そんな経験はありませんか?気のせいだと思いたいところですが、マウスとキーボードを手にすると不思議と作業モードに入れるのは、多くの人が共感する感覚です。 Androidデバイスの大半は、指によるタッチ操作が主な入力方法です。しかし、指先での操作はマウスやキーボードほど滑らかではなく、生産性の面で大きな弱点になりがちです。 もし、パソコンで使っているマウスやキーボードをそのままスマホやタブレットで使えたら便利だと思いませんか?実はそれ、可能です。この記事では、パソコンの入力機器を使ってAndroidデバイスを操作する方法を詳しく解説します

  2. Android TVでADBを設定して使う方法|PCとの接続手順と活用テクニック

    AndroidスマートフォンであれAndroid TVであれ、OSの本質は同じです。つまり、Android TVは他のAndroidデバイスと同じように自由にカスタマイズできるということです。 Androidアプリのサイドローディングなど、本格的なカスタマイズを行いたい場合は、「Android Debug Bridge(ADB)」の力が必要になります。この記事では、ADBを使ってAndroid TVをPCに接続する方法を詳しく解説します。 PCにADBをセットアップする方法 まず最初のステップは、お使いのPCにADBをインストールすることです。そのためには、Android Developers