Android で PreferenceActivity から SharedPreferences を取得するにはどうすればよいですか?
-
26-09-2019 - |
質問
PreferenceActivity を使用して、アプリケーションのいくつかの設定を表示しています。XML ファイルを介して設定をインフレートしているので、onCreate (および完全なクラス メソッド) は次のようになります。
public class FooActivity extends PreferenceActivity {
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
addPreferencesFromResource(R.xml.preference);
}
}
の Javadoc プリファレンスアクティビティ プリファレンスフラグメント と述べています
これらの設定は、ユーザーが操作すると自動的に SharedPreferences に保存されます。このアクティビティの設定階層が使用する SharedPreferences のインスタンスを取得するには、このアクティビティと同じパッケージ内のコンテキストを使用して getDefaultSharedPreferences(android.content.Context) を呼び出します。
しかし、別のアクティビティの SharedPreference の名前を取得するにはどうすればよいでしょうか?電話することしかできない
getSharedPreferences(name, mode)
他のアクティビティでは、PreferenceActivity によって使用された SharedPreference の名前が必要です。名前は何ですか?また、どうすれば取得できますか?
解決
import android.preference.PreferenceManager;
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
// then you use
prefs.getBoolean("keystring", true);
アップデート
によると 共有設定| Android開発者のチュートリアル(パート13) サイ・ギーサ・M・N著、
多くのアプリケーションは、特定のアプリケーションまたはアクティビティの設定でユーザーの設定をキャプチャする方法を提供する場合があります。これをサポートするために、AndroidはAPIの単純なセットを提供します。
通常、プリファレンスは名前と値のペアです。それらは、アプリケーションのさまざまなアクティビティ全体で「共有設定」として保存できます(現在、プロセス間で共有できないことに注意してください)。または、アクティビティに固有の保存する必要があるものである場合があります。
共有設定:共有設定は、アプリケーションのすべてのコンポーネント (アクティビティ、サービスなど) で使用できます。
アクティビティで処理される設定:これらの設定は特定のアクティビティ内でのみ使用でき、アプリケーションの他のコンポーネントでは使用できません。
共有設定:
共有設定は次の助けを借りて管理されます。 getSharedPreferences
の方法 Context
クラス。設定はデフォルトのファイルに保存されます (1) または、ファイル名を指定することもできます (2) 設定を参照するために使用されます。
(1) おすすめの方法 ファイル名を指定せずにデフォルトモードで使用します。
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
(2) ファイル名を指定した場合のインスタンスの取得方法は次のとおりです。
public static final String PREF_FILE_NAME = "PrefFile";
SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);
MODE_PRIVATE
は設定の動作モードです。これはデフォルトのモードであり、作成されたファイルには呼び出し元のアプリケーションのみがアクセスできることを意味します。サポートされている他の 2 つのモードは次のとおりです。 MODE_WORLD_READABLE
そして MODE_WORLD_WRITEABLE
. 。で MODE_WORLD_READABLE
他のアプリケーションは作成されたファイルを読み取ることはできますが、変更することはできません。の場合には MODE_WORLD_WRITEABLE
他のアプリケーションも、作成されたファイルに対する書き込み権限を持っています。
最後に、設定インスタンスを取得したら、次の方法を実行できます。 保存された値を取得する 設定から:
int storedPreference = preferences.getInt("storedInt", 0);
に 値を保存する 設定ファイル内で SharedPreference.Editor
オブジェクトを使用する必要があります。 Editor
ネストされたインターフェイスです。 SharedPreference
クラス。
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();
エディターは次のようなメソッドもサポートしています remove()
そして clear()
ファイルから設定値を削除します。
アクティビティの設定:
共有設定は、他のアプリケーション コンポーネントで使用できます。ただし、他のコンポーネントと設定を共有する必要がなく、アクティビティをプライベート設定にしたい場合は、次の助けを借りてそれを行うことができます。 getPreferences()
活動の方法。の getPreference
メソッドは getSharedPreferences()
メソッドを、設定ファイル名に対するアクティビティ クラスの名前に置き換えます。
以下は設定を取得するコードです
SharedPreferences preferences = getPreferences(MODE_PRIVATE);
int storedPreference = preferences.getInt("storedInt", 0);
値を保存するコードも共有設定の場合と同じです。
SharedPreferences preferences = getPreference(MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();
アクティビティの状態をデータベースに保存するなど、他の方法を使用することもできます。注 Android には、次のパッケージも含まれています。 android.preference
. 。パッケージは、アプリケーション設定 UI を実装するクラスを定義します。
さらにいくつかの例を確認するには、Android をチェックしてください。 データストレージ 開発者サイトに投稿します。
他のヒント
あなたはgetDefaultSharedPreferenes()
へのアクセス権を持っていない場合、あなたはちょうど右の名前を渡す必要があり、代わりにgetSharedPreferences(name, mode)
を使用することができます。
Androidのは、(おそらく、プロジェクトのパッケージ名に基づいて?)この名前を作成します。あなたはSettingsActivity
のonCreate()
に次のコードを入れて、preferencesName
が何であるかを見てそれを得ることができます。
String preferencesName = this.getPreferenceManager().getSharedPreferencesName();
文字列がcom.example.projectname_preferences
のようなものでなければなりません。ハードコードプロジェクト内のどこかに、そしてgetSharedPreferences()
にそれを渡しているとあなたが行くために良いことがあります。
最初にこれらのメソッドを宣言します。
public static void putPref(String key, String value, Context context) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = prefs.edit();
editor.putString(key, value);
editor.commit();
}
public static String getPref(String key, Context context) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
return preferences.getString(key, null);
}
次に、pref を設定したいときにこれを呼び出します。
putPref("myKey", "mystring", getApplicationContext());
設定を取得したい場合はこれを呼び出します。
getPref("myKey", getApplicationContext());
または このオブジェクトを使用できます https://github.com/kcochibili/TinyDB--Android-Shared-Preferences-Turbo すべてがさらに簡素化されます
例:
TinyDB tinydb = new TinyDB(context);
tinydb.putInt("clickCount", 2);
tinydb.putFloat("xPoint", 3.6f);
tinydb.putLong("userCount", 39832L);
tinydb.putString("userName", "john");
tinydb.putBoolean("isUserMale", true);
tinydb.putList("MyUsers", mUsersArray);
tinydb.putImagePNG("DropBox/WorkImages", "MeAtlunch.png", lunchBitmap);
の周りのどこにでもコンテキストを渡すために持つことは本当に迷惑私です。コードはあまりにも冗長で管理不可能になります。私が代わりにすべてのプロジェクトでこれを行う...
public class global {
public static Activity globalContext = null;
と主な活動でそれを設定します。
作成@Override
public void onCreate(Bundle savedInstanceState) {
Thread.setDefaultUncaughtExceptionHandler(new CustomExceptionHandler(
global.sdcardPath,
""));
super.onCreate(savedInstanceState);
//Start
//Debug.startMethodTracing("appname.Trace1");
global.globalContext = this;
また、すべての設定キーは、言語独立している必要があり、私は誰もがいることを言及していないショックを受けています。
getText(R.string.yourPrefKeyName).toString()
今1行のコードで非常に簡単にこのようにそれを呼び出す
global.globalContext.getSharedPreferences(global.APPNAME_PREF, global.MODE_PRIVATE).getBoolean("isMetric", true);
このチェックボックスがあり、任意のJavaファイルでtrue / falseのがすなわち、それの値を取得したい場合 -
を使用する -
Context mContext;
boolean checkFlag;
checkFlag=PreferenceManager.getDefaultSharedPreferences(mContext).getBoolean(KEY,DEFAULT_VALUE);`
を更新しました2019 の
あなたは単にPowerPreference
ライブラリを使用することができます。
https://github.com/AliEsaAssadi/Android-Power-Preferenceする
取得共有優先インスタンス
あなただけの呼び出しに必要なデフォルトのインスタンスを取得するには、
PowerPreference.getDefaultFile()
それとも、特定の設定ファイルをしたい場合は、
PowerPreference.getFileByName(fileName)
書き込みデータ:
PowerPreference.getDefaultFile().put(key,value)
の取得データ
PowerPreference.getDefaultFile().getString(key,value)