2011-10-21 10 views
1

SharedPrefencesと初期化に問題があります。SharedPreferencesを使用したAndroid初期化

私のアプリケーションには、ユーザーを挿入するログインがあります。そのユーザーには特定の環境設定があります。後で読み込むために、ユーザーに応じて環境設定を保存する必要があります。

私はSharedPrefencesが解決策になると思いますが、本当に私はそう思っていますが、私はそれらを初期化するための問題があります。オプションと呼ばれるActivityクラスがあります。それはオプションの値を返す静的関数を持っています...しかし、問題がある、私はそのアクティビティ(インテント)を作成する前にその関数を呼び出すので、関数は最後のユーザーが持っている最後の値を返すと思いますオプションで選択...

どのように呼び出す前にオプションを読み込むことができますか?

私は最初にインテントを使用して、ユーザーの追加データとオプションのonCreate()を使用して初期化しますが、インテントを作成すると、オプションが表示されます(xmlがロードされます)。

ヘルプpls?

+0

アクティビティに静的メソッドを使用しないでください。非常に悪い習慣。あなたのランチャー活動を初期化するあなたの好みを保持しているシングルトンを持っているのが最善でしょう。私は秒でコードを掲示します.... – SnowyTracks

答えて

2

これを試してみてください。保存したい変数ごとにメソッドを追加してください。

public class PreferenceManager { 

    private static PreferenceManager self; 
    private SharedPreferences preferences = null; 
    private SharedPreferences.Editor editor = null; 
    private boolean isInitialised = false; 
    private static final String MY_PREFERENCE = "mypreferencekey"; 
    private String myPreference = null; 

    public void initialise(Context context) { 
    if (!isInitialised) { 
     preferences = context.getSharedPreferences("MyPreferencePlace", Context.MODE_PRIVATE); 
     editor = preferences.edit(); 
     loadPreferences(); 
     isInitialised = true; 
    } 
    } 

    public static PreferenceManager getInstance() { 
    if (self == null) { 
     self = new PreferenceManager(); 
    } 
    return self; 
    } 

    private PreferenceManager() { 
    } 

    public void setPreference(String newPreferenceValue) { 
    this.myPreference = newPreferenceValue; 
    savePreferences(); 
    } 

    public String getPreference(){ 
    return myPreference; 
    } 

    private void savePreferences() { 
    editor.putString(MY_PREFERENCE, myPreference); 
    editor.commit(); 
    } 

    private void loadPreferences() { 
    myPreference = preferences.getString(MY_PREFERENCE, null); 
    } 

} 
0

SharedPreferencesはすべてcontextであり、初期化することができます。あなたのアプリケーションは常に最初にActivityを開きますので、あなたはいつもcontextを持っています。

私はSingletonクラスでSharedPreferencesをラップし、ちょうどgetInstance方法でパラメータとしてcontextを渡すことができ助言します。このように、すべてのアクティビティで共有プリファレンスにアクセスできるはずです。

0

私はアンドロイドのための依存関係のインジェクター上で動作し、共有設定の内容は、(参照:https://github.com/ko5tik/andject、PreferenceInjector)をすでに注釈付きフィールドに、注射です。パッチと改善は大歓迎です。環境設定の保存はすぐに開始されます

関連する問題