web-dev-qa-db-ja.com

Android-非アクティビティクラスでSharedPreferencesを使用する方法は?

非アクティビティクラスでSharedPreferencesをどのように使用しますか?汎用的なPreferencesユーティリティクラスを作成して_Android.content.Context_をインポートしようとしましたが、EclipseではgetSharedPreferences()を使用できませんでした。

38
Jake Wilson

SharedPreferencesはコンテキストに関連しています。コンテキストを介してのみ参照できます。

コンテキストをパラメーターとしてクラスに渡すだけです。たとえば、コンストラクター内。

あなたの活動で:

MyClass myClass = new MyClass(this);
48
Sandor

私がこれに見つけた解決策は:

1-MainActivityクラス(つまり、プロジェクトのコンテキストを取得する前に常に起動される)で、コンテキストの静的変数を作成します。

_public static Context contextOfApplication;_

2-このクラスの重要なメソッド(onCreate、コンストラクターなど)で、getApplicationContextメソッドを使用してこの変数を初期化します。

_public void onCreate() {
    contextOfApplication = getApplicationContext();
}
_

3-同じクラスで、この変数の「getter」メソッドを作成します(静的である必要があります)。

_public static Context getContextOfApplication(){
    return contextOfApplication;
}
_

4-非アクティビティクラスでは、作成されたメソッドを静的に呼び出してコンテキストを取得します。

Context applicationContext = MyActivityClass.getContextOfApplication();

5- PreferenceManagerクラスを使用してSharedPreferences変数を取得します。

_SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(applicationContext);
_

それが役に立てば幸い。

44
Santi

アプリケーションコンテキストで defaultプリファレンス を使用してみてください。コンテキストは、アプリケーションがLinuxまたはWindowsで実行される環境に似ています(たとえば、PATHウィンドウスタイルやコンソールサイズなどの環境変数)。各アクティビティとサービスには、たとえば画面の向き、テーマ、ラベルなどの独自のコンテキストもありますが、アプリケーションの場合、アクティビティのコンテキストは必要ありません。アプリに対してグローバルなものが必要です。これは context.getApplicationContext() は便利です。これはアプリ全体で同じであり、常に同じデフォルト設定を提供します。

2
Dan S

Kotlinでは、これを行うことができます。

val myClass = MyClass(this)

これがクラスでコンテキストを取得する方法です

class MyClass(context: Context) {

    val context: Context = context

}

コンテキストで共有設定を取得するには、これを行うことができます:

context.getSharedPreferences(...)
1
Zohab Ali

このコードを新しいクラスに使用します。

import Android.content.Context;
import Android.content.SharedPreferences;

/**
   * Created by Atiar Talukdar on 6/5/2017.
*/

public class TemporaryStorageSharedPreference {
protected final static int DEFAULT = 0;
int temp = 0;

public int readSharedPreference(Context context, String spName,String key){
    SharedPreferences sharedPreferences = context.getSharedPreferences(spName, Context.MODE_PRIVATE);
    return temp = sharedPreferences.getInt(key,DEFAULT);
}

public void writeSharedPreference(Context context,String ammount,String spName,String key ){

    SharedPreferences sharedPreferences = context.getSharedPreferences(spName, Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putInt(key, DEFAULT);
    editor.commit();
}
}
1
Atiar Talukdar

SharedPreferencesクラスを作成

 /**
     * @param mContext
     * @param key
     * @param value
     */
    public static void savePreferences(Context mContext, String key, String value) {
        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mContext);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putString(key, value).apply();
    }

    /**
     * @param context
     * @param keyValue
     * @return
     */
    public static String getPreferences(Context context, String keyValue) {
        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
        return sharedPreferences.getString(keyValue, "");
    }

    /**
     * @param mContext
     */
    public static void removeAllSharedPreferences(Context mContext) {
        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mContext);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.clear().apply();
    }
0
Mohsinali

まず、クラスでプライベート属性を宣言します。私の場合、BaseAdapterクラスがあります。

private final Context ctx;
private final Vector<Acto> actos;

public ActoAdaptador(Context ctx, Vector<Acto> as) {
    super();
    this.ctx = ctx;
    this.actos = as;
}

次に、SharedPreferencesを使用する場合:

ctx.getSharedPreferences("com.joninazio.euskofest.UsingPreferences_preferences", Context.MODE_PRIVATE)

その方法は少なくとも私にとってはうまくいきます:)

0
russellhoff

このコードを使用して、アクティビティからcontextを取得します。

if (context != null) {
    SharedPreferences sharedPrefs = context.getSharedPreferences("YOUR.PACKAGE.NAME", MODE_PRIVATE);
}
0
Mustafa Hasan

静的メソッドを使用してSharedPreferenceContext Objectなしで説明 here

InMainActivitybeforeOnCreate

public static SharedPreferences preferences;

InOnCreateメソッド追加

preferences = getSharedPreferences( getPackageName() + "_preferences", MODE_PRIVATE);

PreferenceHelperクラスを作成します。静的メソッドGettersおよびセッター

public class PreferenceHelper {

final public static String KEY_DEMO_NAME = "Demo Name";
public static void setName(String value) {
    MainActivity.preferences.edit().putString(KEY_DEMO_NAME, value ).commit();
}
public static String getName() {
    return MainActivity.preferences.getString(KEY_DEMO_NAME,"");
}

}

0
Code Spy