web-dev-qa-db-ja.com

AndroidのPreferenceActivityからSharedPreferencesを取得する方法

アプリケーションの設定をいくつか表示するためにPreferenceActivityを使用しています。 onCreate(および完全なクラスメソッド)が次のようになるように、xmlファイルを使用して設定を拡張しています。

public class FooActivity extends PreferenceActivity {
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        addPreferencesFromResource(R.xml.preference);
    }
}

のJavadoc PreferenceActivity PreferenceFragment は、

これらの設定は、ユーザーが対話したときに自動的にSharedPreferencesに保存されます。このアクティビティの設定階層で使用されるSharedPreferencesのインスタンスを取得するには、このアクティビティと同じパッケージ内のコンテキストを使用してgetDefaultSharedPreferences(Android.content.Context)を呼び出します。

しかし、どのようにして別のアクティビティでSharedPreferenceの名前を取得するのですか?電話しかできない

getSharedPreferences(name, mode)

他のアクティビティでは、PreferenceActivityで使用されていたSharedPreferenceの名前が必要です。名前は何ですか、またはそれをどのように取得できますか?

359
Dave
import Android.preference.PreferenceManager;
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
// then you use
prefs.getBoolean("keystring", true);

更新

に従ってください。 Sai Geetha M NによるAndroid開発者チュートリアル(パート13)

多くのアプリケーションは、特定のアプリケーションの設定やアクティビティに関するユーザーの好みを捉える方法を提供します。これをサポートするために、Androidは単純なAPIのセットを提供します。

設定は通常、名前と値のペアです。それらは、アプリケーション内のさまざまなアクティビティにまたがって「共有設定」として保存できます(現在、プロセス間で共有することはできません)。あるいは、アクティビティに固有のものを保存する必要がある可能性があります。

  1. 共有設定:アプリケーションのすべてのコンポーネント(アクティビティ、サービスなど)で共有設定を使用できます。

  2. アクティビティ処理プリファレンス:これらのプリファレンスは特定のアクティビティ内でのみ使用でき、アプリケーションの他のコンポーネントでは使用できません。

共有設定:

共有設定は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_READABLEMODE_WORLD_WRITEABLEです。 MODE_WORLD_READABLEでは、他のアプリケーションは作成されたファイルを読むことができますが、それを変更することはできません。 MODE_WORLD_WRITEABLEの場合、他のアプリケーションも作成されたファイルに対する書き込み権限を持っています。

最後に、プリファレンスインスタンスを取得したら、次のようにして 保存された値を取得します プリファレンスから取得します。

int storedPreference = preferences.getInt("storedInt", 0);

設定ファイルに 値を格納する SharedPreference.Editorオブジェクトを使用する必要があります。 EditorSharedPreferenceクラスにネストされたインタフェースです。

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の Data Storage を開発者サイトに投稿してください。

704
Pentium10

getDefaultSharedPreferenes()にアクセスできない場合は、代わりにgetSharedPreferences(name, mode)を使用できます。正しい名前を渡すだけです。

Androidは(おそらくあなたのプロジェクトのパッケージ名に基づいて)この名前を作成します。次のコードをSettingsActivityonCreate()に入れて、preferencesNameが何であるかを見ることによってそれを得ることができます。

String preferencesName = this.getPreferenceManager().getSharedPreferencesName();

文字列はcom.example.projectname_preferencesのようになります。あなたのプロジェクトのどこかにハードコードし、それをgetSharedPreferences()に渡してください。

29

最初にこれらのメソッドを宣言してください。

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);
}

それでは、設定をしたいときにこれを呼び出します。

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);
20
kc ochibili

どこにでも文脈を渡らなければならないのは本当に厄介です。コードが冗長すぎて管理できなくなります。代わりにすべてのプロジェクトでこれを行います...

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);
3
hamish

チェックボックスがあり、その値を取得したい場合は、任意のJavaファイルでtrue/falseを指定します -

つかいます -

Context mContext;
boolean checkFlag;

checkFlag=PreferenceManager.getDefaultSharedPreferences(mContext).getBoolean(KEY,DEFAULT_VALUE);`
2
UrviG

2019年更新

あなたは単にPowerPreferenceライブラリを使うことができます

https://github.com/AliEsaAssadi/Android-Power-Preference

共有設定インスタンスの取得

デフォルトのインスタンスを取得するには、あなたが呼び出す必要があります

PowerPreference.getDefaultFile()

特定の設定ファイルが必要な場合

PowerPreference.getFileByName(fileName)

データの書き込み

PowerPreference.getDefaultFile().put(key,value)

データを取得する

PowerPreference.getDefaultFile().getString(key,value)
0
Ali Asadi