このチュートリアルでは、Shared Preferencesを使用して、Androidアプリケーションでデータをキーと値のペアの形式で保存します。n
Android Shared Preferencesの概要
Shared Preferencesは、ユーザーがアプリケーションを終了しても永続的に保持される、キーと値のペアの形式での設定を活用するためのものです。Androidは、Shared Preferencesの設定をXMLファイルとしてshared_prefsフォルダーに保存します。このフォルダーは、DATA/data/{アプリケーションパッケージ}ディレクトリーの下にあります。DATAフォルダーは、Environment.getDataDirectory()
を呼び出すことで取得できます。SharedPreferencesはアプリケーション固有のものであり、以下の操作を実行するとデータが失われます:
- アプリケーションをアンインストールする
- アプリケーションデータをクリアする(設定から)
名前からもわかるように、主な目的はユーザー指定の設定の詳細を保存することです。例えば、ユーザー固有の設定や、ユーザーをアプリケーションにログインしたままにするためのものです。設定にアクセスするためには、次の3つのAPIから選択できます:
- getPreferences() : アクティビティ内から利用し、アクティビティ固有の設定にアクセスするためのもの
- getSharedPreferences() : アクティビティ(または他のアプリケーションコンテキスト)内から利用し、アプリケーションレベルの設定にアクセスするためのもの
- getDefaultSharedPreferences():PreferenceManagerで使用され、Androidの総合的な設定フレームワークと連動する共有プリファレンスを取得します。
このチュートリアルでは、getSharedPreferences()
を使用します。このメソッドは次のように定義されています:getSharedPreferences (String PREFS_NAME, int mode)
PREFS_NAMEはファイルの名前です。modeは動作モードです。以下は適用可能な動作モードです:
- MODE_PRIVATE:デフォルトのモードで、作成されたファイルは呼び出し元のアプリケーションからのみアクセスできます
- MODE_WORLD_READABLE:世界で読み取り可能なファイルを作成することは非常に危険であり、アプリケーションのセキュリティホールを引き起こす可能性があります
- MODE_WORLD_WRITEABLE:世界で書き込み可能なファイルを作成することは非常に危険であり、アプリケーションのセキュリティホールを引き起こす可能性があります
- MODE_MULTI_PROCESS:このメソッドは、Shared Preferenceインスタンスが既にロードされている場合でも、設定の変更をチェックします
- MODE_APPEND:新しいプリファレンスを既存のプリファレンスに追加します
- MODE_ENABLE_WRITE_AHEAD_LOGGING:データベースのオープンフラグです。設定されている場合、デフォルトで書き込み先ログが有効になります
初期化
共有プリファレンスを編集し、変更を保存するためにエディタが必要です。次のコードを使用して共有プリファレンスを取得できます。
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0); // 0 - for private mode
Editor editor = pref.edit();
データの保存
editor.commit()は、共有プリファレンスに変更を保存するために使用されます。
editor.putBoolean("key_name", true); // Storing boolean - true/false
editor.putString("key_name", "string value"); // Storing string
editor.putInt("key_name", "int value"); // Storing integer
editor.putFloat("key_name", "float value"); // Storing float
editor.putLong("key_name", "long value"); // Storing long
editor.commit(); // commit changes
データの取得
次のようにgetString()を呼び出すことで、保存されたプリファレンスからデータを取得できます。
pref.getString("key_name", null); // getting String
pref.getInt("key_name", -1); // getting Integer
pref.getFloat("key_name", null); // getting Float
pref.getLong("key_name", null); // getting Long
pref.getBoolean("key_name", null); // getting boolean
データのクリアまたは削除
remove(“キー名”)は、特定の値を削除するために使用されます。clear()は、すべてのデータを削除するために使用されます。
editor.remove("name"); // will delete key name
editor.remove("email"); // will delete key email
editor.commit(); // commit changes
editor.clear();
editor.commit(); // commit changes
プロジェクトの構造
Android Shared Preferencesプロジェクトのコード
activity_main.xml
レイアウトには、名前とメールを格納および表示するための2つのEditTextビューがあります。3つのボタンは、それぞれのonClickをMainActivity
で実装しています。
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin" >
<Button
android:id="@+id/btnSave"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:onClick="Save"
android:text="Save" />
<Button
android:id="@+id/btnRetr"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:onClick="Get"
android:text="Retrieve" />
<Button
android:id="@+id/btnClear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/etEmail"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:onClick="clear"
android:text="Clear" />
<EditText
android:id="@+id/etEmail"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Email"
android:inputType="textEmailAddress"
android:layout_below="@+id/etName"
android:layout_marginTop="20dp"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
<EditText
android:id="@+id/etName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Name"
android:inputType="text"
android:layout_alignParentTop="true"
android:layout_alignLeft="@+id/etEmail"
android:layout_alignStart="@+id/etEmail" />
</RelativeLayout>
MainActivity.java
ファイルは、キーを介してデータを保存および取得するために使用されます。
package com.journaldev.sharedpreferences;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends Activity {
SharedPreferences sharedpreferences;
TextView name;
TextView email;
public static final String mypreference = "mypref";
public static final String Name = "nameKey";
public static final String Email = "emailKey";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
name = (TextView) findViewById(R.id.etName);
email = (TextView) findViewById(R.id.etEmail);
sharedpreferences = getSharedPreferences(mypreference,
Context.MODE_PRIVATE);
if (sharedpreferences.contains(Name)) {
name.setText(sharedpreferences.getString(Name, ""));
}
if (sharedpreferences.contains(Email)) {
email.setText(sharedpreferences.getString(Email, ""));
}
}
public void Save(View view) {
String n = name.getText().toString();
String e = email.getText().toString();
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString(Name, n);
editor.putString(Email, e);
editor.commit();
}
public void clear(View view) {
name = (TextView) findViewById(R.id.etName);
email = (TextView) findViewById(R.id.etEmail);
name.setText("");
email.setText("");
}
public void Get(View view) {
name = (TextView) findViewById(R.id.etName);
email = (TextView) findViewById(R.id.etEmail);
sharedpreferences = getSharedPreferences(mypreference,
Context.MODE_PRIVATE);
if (sharedpreferences.contains(Name)) {
name.setText(sharedpreferences.getString(Name, ""));
}
if (sharedpreferences.contains(Email)) {
email.setText(sharedpreferences.getString(Email, ""));
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// メニューをインフレートする。これにより、アクションバーにアイテムが追加されます。
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
}
mypreferenceは、共有プリファレンスのキーと値のペアが格納されるファイルの名前です。以下の画像は、プロジェクトの最終出力を示しています:これでこのチュートリアルは終了です。以下のリンクからプロジェクトAndroid Shared Preferencesをダウンロードできます。
Source:
https://www.digitalocean.com/community/tutorials/android-shared-preferences-example-tutorial