時間値を保存したいので、取得して編集する必要があります。これを行うにはどうすればよいSharedPreferences
ですか?
31 に答える
共有設定を取得するには、アクティビティで次のメソッドを使用します。
SharedPreferences prefs = this.getSharedPreferences(
"com.example.app", Context.MODE_PRIVATE);
プリファレンスを読み取るには:
String dateTimeKey = "com.example.app.datetime";
// use a default value using new Date()
long l = prefs.getLong(dateTimeKey, new Date().getTime());
プリファレンスを編集して保存するには
Date dt = getSomeDate();
prefs.edit().putLong(dateTimeKey, dt.getTime()).apply();
Android SDK のサンプル ディレクトリには、共有設定の取得と保存の例が含まれています。次の場所にあります。
<android-sdk-home>/samples/android-<platformversion>/ApiDemos directory
編集==>
commit()
ここでもとの違いを書くことが重要であることに気付きapply()
ました。
commit()
true
値が正常に保存された場合は戻り、それ以外の場合は戻りますfalse
。値を SharedPreferences に同期的に保存します。
apply()
2.3 で追加され、成功しても失敗しても値を返しません。値をすぐに SharedPreferences に保存しますが、非同期コミットを開始します。詳細はこちら。
共有プリファレンスに値を保存するには:
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("Name","Harneet");
editor.apply();
共有プリファレンスから値を取得するには:
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
String name = preferences.getString("Name", "");
if(!name.equalsIgnoreCase(""))
{
name = name + " Sethi"; /* Edit the value here*/
}
からデータを編集するにはsharedpreference
SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
editor.putString("text", mSaved.getText().toString());
editor.putInt("selection-start", mSaved.getSelectionStart());
editor.putInt("selection-end", mSaved.getSelectionEnd());
editor.apply();
からデータを取得するにはsharedpreference
SharedPreferences prefs = getPreferences(MODE_PRIVATE);
String restoredText = prefs.getString("text", null);
if (restoredText != null)
{
//mSaved.setText(restoredText, TextView.BufferType.EDITABLE);
int selectionStart = prefs.getInt("selection-start", -1);
int selectionEnd = prefs.getInt("selection-end", -1);
/*if (selectionStart != -1 && selectionEnd != -1)
{
mSaved.setSelection(selectionStart, selectionEnd);
}*/
}
編集
このスニペットは API Demo サンプルから取得しました。そこにEditText
箱がありました。これcontext
では必須ではありません。同じことをコメントしています。
書くには:
SharedPreferences preferences = getSharedPreferences("AUTHENTICATION_FILE_NAME", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("Authentication_Id",userid.getText().toString());
editor.putString("Authentication_Password",password.getText().toString());
editor.putString("Authentication_Status","true");
editor.apply();
読むには:
SharedPreferences prfs = getSharedPreferences("AUTHENTICATION_FILE_NAME", Context.MODE_PRIVATE);
String Astatus = prfs.getString("Authentication_Status", "");
最も簡単な方法:
保存する:
getPreferences(MODE_PRIVATE).edit().putString("Name of variable",value).commit();
取得するには:
your_variable = getPreferences(MODE_PRIVATE).getString("Name of variable",default value);
シングルトン共有設定クラス。将来的に他の人に役立つかもしれません。
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
public class SharedPref
{
private static SharedPreferences mSharedPref;
public static final String NAME = "NAME";
public static final String AGE = "AGE";
public static final String IS_SELECT = "IS_SELECT";
private SharedPref()
{
}
public static void init(Context context)
{
if(mSharedPref == null)
mSharedPref = context.getSharedPreferences(context.getPackageName(), Activity.MODE_PRIVATE);
}
public static String read(String key, String defValue) {
return mSharedPref.getString(key, defValue);
}
public static void write(String key, String value) {
SharedPreferences.Editor prefsEditor = mSharedPref.edit();
prefsEditor.putString(key, value);
prefsEditor.commit();
}
public static boolean read(String key, boolean defValue) {
return mSharedPref.getBoolean(key, defValue);
}
public static void write(String key, boolean value) {
SharedPreferences.Editor prefsEditor = mSharedPref.edit();
prefsEditor.putBoolean(key, value);
prefsEditor.commit();
}
public static Integer read(String key, int defValue) {
return mSharedPref.getInt(key, defValue);
}
public static void write(String key, Integer value) {
SharedPreferences.Editor prefsEditor = mSharedPref.edit();
prefsEditor.putInt(key, value).commit();
}
}
一度電話SharedPref.init()
をかけるだけMainActivity
SharedPref.init(getApplicationContext());
データを書き込む
SharedPref.write(SharedPref.NAME, "XXXX");//save string in shared preference.
SharedPref.write(SharedPref.AGE, 25);//save int in shared preference.
SharedPref.write(SharedPref.IS_SELECT, true);//save boolean in shared preference.
データを読み取る
String name = SharedPref.read(SharedPref.NAME, null);//read string in shared preference.
int age = SharedPref.read(SharedPref.AGE, 0);//read int in shared preference.
boolean isSelect = SharedPref.read(SharedPref.IS_SELECT, false);//read boolean in shared preference.
情報を保存するには
SharedPreferences preferences = getSharedPreferences(PREFS_NAME,Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("username", username.getText().toString());
editor.putString("password", password.getText().toString());
editor.putString("logged", "logged");
editor.commit();
設定をリセットするには
SharedPreferences.Editor editor = preferences.edit();
editor.clear();
editor.commit();
ログイン値を by に保存する方法の簡単な解決策SharedPreferences
。
MainActivity
「保持したいものの値」を格納するクラスまたは他のクラスを拡張できます。これをライタークラスとリーダークラスに入れます:
public static final String GAME_PREFERENCES_LOGIN = "Login";
ここでInputClass
はOutputClass
、それぞれ入力クラスと出力クラスを示します。
// This is a storage, put this in a class which you can extend or in both classes:
//(input and output)
public static final String GAME_PREFERENCES_LOGIN = "Login";
// String from the text input (can be from anywhere)
String login = inputLogin.getText().toString();
// then to add a value in InputCalss "SAVE",
SharedPreferences example = getSharedPreferences(GAME_PREFERENCES_LOGIN, 0);
Editor editor = example.edit();
editor.putString("value", login);
editor.commit();
これで、他のクラスなど、他の場所で使用できます。以下はOutputClass
.
SharedPreferences example = getSharedPreferences(GAME_PREFERENCES_LOGIN, 0);
String userString = example.getString("value", "defValue");
// the following will print it out in console
Logger.getLogger("Name of a OutputClass".class.getName()).log(Level.INFO, userString);
editor.putString("text", mSaved.getText().toString());
ここでは、文字列を抽出できる場所またはmSaved
任意の場所にすることができます。文字列を指定するだけです。ここで text は(または) から取得した値を保持するキーになります。 TextView
EditText
mSaved
TextView
EditText
SharedPreferences prefs = this.getSharedPreferences("com.example.app", Context.MODE_PRIVATE);
また、「com.example.app」などのパッケージ名を使用して設定ファイルを保存する必要もありません。自分の好きな名前を言うことができます。お役に立てれば !
この方法を使用して値を保存できます。
public void savePreferencesForReasonCode(Context context,
String key, String value) {
SharedPreferences sharedPreferences = PreferenceManager
.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(key, value);
editor.commit();
}
このメソッドを使用すると、SharedPreferences から値を取得できます。
public String getPreferences(Context context, String prefKey) {
SharedPreferences sharedPreferences = PreferenceManager
.getDefaultSharedPreferences(context);
return sharedPreferences.getString(prefKey, "");
}
prefKey
特定の値を保存するために使用したキーは次のとおりです。ありがとう。
SharedPreferencesの使用方法について、人々が推奨する多くの方法があります。ここでデモプロジェクトを作成しました。サンプルのキー ポイントは、ApplicationContext と単一の sharedpreferences オブジェクトを使用することです。これは、次の機能でSharedPreferencesを使用する方法を示しています:-
- シングルトン クラスを使用して SharedPreferences にアクセス/更新する
- 読み取り/書き込み用に常にコンテキストを渡す必要はありません
- commit() の代わりに apply() を使用します
- apply() は非同期保存であり、何も返さず、最初にメモリ内の値を更新し、変更は後で非同期的にディスクに書き込まれます。
- commit() は同期保存であり、結果に基づいて true/false を返します。変更は同期的にディスクに書き込まれます
- Android 2.3 以降のバージョンで動作します
以下のように使用例: -
MyAppPreference.getInstance().setSampleStringKey("some_value");
String value= MyAppPreference.getInstance().getSampleStringKey();
ここでソースコードを取得し 、詳細な APIは developer.android.com
sharedpreferences のヘルパー クラスを作成します。
import android.content.Context;
import android.content.SharedPreferences;
/**
* Created by mete_ on 23.12.2016.
*/
public class HelperSharedPref {
Context mContext;
public HelperSharedPref(Context mContext) {
this.mContext = mContext;
}
/**
*
* @param key Constant RC
* @param value Only String, Integer, Long, Float, Boolean types
*/
public void saveToSharedPref(String key, Object value) throws Exception {
SharedPreferences.Editor editor = mContext.getSharedPreferences(key, Context.MODE_PRIVATE).edit();
if (value instanceof String) {
editor.putString(key, (String) value);
} else if (value instanceof Integer) {
editor.putInt(key, (Integer) value);
} else if (value instanceof Long) {
editor.putLong(key, (Long) value);
} else if (value instanceof Float) {
editor.putFloat(key, (Float) value);
} else if (value instanceof Boolean) {
editor.putBoolean(key, (Boolean) value);
} else {
throw new Exception("Unacceptable object type");
}
editor.commit();
}
/**
* Return String
* @param key
* @return null default is null
*/
public String loadStringFromSharedPref(String key) throws Exception {
SharedPreferences prefs = mContext.getSharedPreferences(key, Context.MODE_PRIVATE);
String restoredText = prefs.getString(key, null);
return restoredText;
}
/**
* Return int
* @param key
* @return null default is -1
*/
public Integer loadIntegerFromSharedPref(String key) throws Exception {
SharedPreferences prefs = mContext.getSharedPreferences(key, Context.MODE_PRIVATE);
Integer restoredText = prefs.getInt(key, -1);
return restoredText;
}
/**
* Return float
* @param key
* @return null default is -1
*/
public Float loadFloatFromSharedPref(String key) throws Exception {
SharedPreferences prefs = mContext.getSharedPreferences(key, Context.MODE_PRIVATE);
Float restoredText = prefs.getFloat(key, -1);
return restoredText;
}
/**
* Return long
* @param key
* @return null default is -1
*/
public Long loadLongFromSharedPref(String key) throws Exception {
SharedPreferences prefs = mContext.getSharedPreferences(key, Context.MODE_PRIVATE);
Long restoredText = prefs.getLong(key, -1);
return restoredText;
}
/**
* Return boolean
* @param key
* @return null default is false
*/
public Boolean loadBooleanFromSharedPref(String key) throws Exception {
SharedPreferences prefs = mContext.getSharedPreferences(key, Context.MODE_PRIVATE);
Boolean restoredText = prefs.getBoolean(key, false);
return restoredText;
}
}
共有プリファレンスに値を保存するには:
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = sp.edit();
editor.putString("Name","Jayesh");
editor.commit();
共有プリファレンスから値を取得するには:
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
String name = sp.getString("Name", "");
この単純なライブラリを使用して、SharedPreferences を呼び出す方法を次に示します。
TinyDB tinydb = new TinyDB(context);
tinydb.putInt("clickCount", 2);
tinydb.putString("userName", "john");
tinydb.putBoolean("isUserMale", true);
tinydb.putList("MyUsers", mUsersArray);
tinydb.putImagePNG("DropBox/WorkImages", "MeAtlunch.png", lunchBitmap);
//These plus the corresponding get methods are all Included
シンプルで手間のかからない :: "Android-SharedPreferences-Helper" ライブラリ
遅ればせながら: 「Android-SharedPreferences-Helper」ライブラリを作成して、複雑さと使用の労力を軽減しましたSharedPreferences
。また、いくつかの拡張機能も提供します。それが提供するいくつかのものは次のとおりです。
- 1 行の初期化とセットアップ
- デフォルト設定とカスタム設定ファイルのどちらを使用するかを簡単に選択
- 各データ型の定義済み (データ型の既定値) およびカスタマイズ可能な (選択可能なもの) の既定値
- パラメータを追加するだけで、1回の使用で異なるデフォルト値を設定する機能
- デフォルトクラスの場合と同様に、OnSharedPreferenceChangeListener を登録および登録解除できます。
dependencies {
...
...
compile(group: 'com.viralypatel.sharedpreferenceshelper', name: 'library', version: '1.1.0', ext: 'aar')
}
SharedPreferencesHelper オブジェクトの宣言: (クラス レベルで推奨)
SharedPreferencesHelper sph;
SharedPreferencesHelper オブジェクトのインスタンス化: (onCreate() メソッドで推奨)
// use one of the following ways to instantiate
sph = new SharedPreferencesHelper(this); //this will use default shared preferences
sph = new SharedPreferencesHelper(this, "myappprefs"); // this will create a named shared preference file
sph = new SharedPreferencesHelper(this, "myappprefs", 0); // this will allow you to specify a mode
共通の好みに価値を置く
かなりシンプル!.edit()
デフォルトの方法 (SharedPreferences クラスを使用する場合) とは異なり、何度も呼び出す必要はありません.commit()
。
sph.putBoolean("boolKey", true);
sph.putInt("intKey", 123);
sph.putString("stringKey", "string value");
sph.putLong("longKey", 456876451);
sph.putFloat("floatKey", 1.51f);
// putStringSet is supported only for android versions above HONEYCOMB
Set name = new HashSet();
name.add("Viral");
name.add("Patel");
sph.putStringSet("name", name);
それでおしまい!あなたの値は共有設定に保存されます。
共有設定から値を取得する
繰り返しますが、キー名を使用した単純なメソッド呼び出しは 1 つだけです。
sph.getBoolean("boolKey");
sph.getInt("intKey");
sph.getString("stringKey");
sph.getLong("longKey");
sph.getFloat("floatKey");
// getStringSet is supported only for android versions above HONEYCOMB
sph.getStringSet("name");
他にも拡張機能がたくさんあります
拡張機能の詳細や使い方、インストール手順などはGitHub リポジトリページで確認してください。
ここで、SharedPreferences を使用すると、この質問のほとんどのスニペットに MODE_PRIVATE のようなものが含まれることを追加したいと思います。MODE_PRIVATE は、この共有設定に書き込んだものはすべて、アプリケーションだけが読み取ることができることを意味します。
getSharedPreferences() メソッドに渡すキーに関係なく、android はその名前のファイルを作成し、設定データをそこに格納します。また、アプリケーションに複数の設定ファイルを用意する場合は、getSharedPreferences() を使用することになっていることも覚えておいてください。単一の設定ファイルを使用し、すべてのキーと値のペアをそこに保存する場合は、getSharedPreference() メソッドを使用します。上記の 2 つの違いを理解することさえせずに、誰もが (私を含めて) getSharedPreferences() フレーバーを単純に使用する理由は奇妙です。
次のビデオ チュートリアルが役立つはずです https://www.youtube.com/watch?v=2PcAQ1NBy98
関数の方法でグローバル変数を格納および取得する。テストするには、ページに Textview アイテムがあることを確認し、コード内の 2 行のコメントを解除して実行します。次に、2 行を再度コメントして実行します。
ここで、TextView の ID はユーザー名とパスワードです。
使用するすべてのクラスで、これら 2 つのルーチンを最後に追加します。このルーチンをグローバル ルーチンにしたいのですが、方法がわかりません。これは機能します。
バリアベルはどこでも入手できます。変数を「MyFile」に保存します。あなたはそれをあなたのやり方で変えるかもしれません。
を使用して呼び出します
storeSession("username","frans");
storeSession("password","!2#4%");***
変数のユーザー名は「frans」で埋められ、パスワードは「!2#4%」で埋められます。再起動後も利用可能です。
を使用して取得します
password.setText(getSession(("password")));
usernames.setText(getSession(("username")));
私のgrid.javaのコード全体の下
package nl.yentel.yenteldb2;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
public class Grid extends AppCompatActivity {
private TextView usernames;
private TextView password;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_grid);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
***// storeSession("username","frans.eilering@gmail.com");
//storeSession("password","mijn wachtwoord");***
password = (TextView) findViewById(R.id.password);
password.setText(getSession(("password")));
usernames=(TextView) findViewById(R.id.username);
usernames.setText(getSession(("username")));
}
public void storeSession(String key, String waarde) {
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyFile", MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
editor.putString(key, waarde);
editor.commit();
}
public String getSession(String key) {
//http://androidexample.com/Android_SharedPreferences_Basics/index.php?view=article_discription&aid=126&aaid=146
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyFile", MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
String output = pref.getString(key, null);
return output;
}
}
以下にテキストビュー項目があります
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="usernames"
android:id="@+id/username"
android:layout_below="@+id/textView"
android:layout_alignParentStart="true"
android:layout_marginTop="39dp"
android:hint="hier komt de username" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="password"
android:id="@+id/password"
android:layout_below="@+id/user"
android:layout_alignParentStart="true"
android:hint="hier komt het wachtwoord" />