2012-04-11 9 views
4

共有プリファレンスに設定を保存するDialogViewがあります。それはパッケージAにあり、これらのプリファレンスを読むことができるはずのBパッケージにある別のアクティビティがあります。コンテキストが変更されたときに共有プリファレンスを読み取る

私は、コンテキストと共有の設定名を取り、これらの設定を取得するラッパークラスを作成しました。初めて共有された設定が最初に設定されたときはすべてうまく動作しますが、私がそれを変更すると、初めて同じ結果が得られました。

問題1つのプロセスで優先度を保存し、別のプロセスで優先度を読み取る必要があるという問題があります。

だから、Contextが変更され、新しいコンテキストを取得することができないようです。最新の共有設定を取得するにはどうすればよいですか?

ありがとうございます。

私のラッパークラスを見てみてください

public class PhotoAppWidgetSettingsProxy extends Proxy { 

    private final static String PREFERENCES_NAME = PhotoAppWidgetSettingsProxy.class.getName(); 
    private final static int PREFERENCES_MODE = Context.MODE_PRIVATE; 

    private Context mCtx = null; 
    private SharedPreferences pref = null; 
    private SharedPreferences.Editor editor = null; 


    public PhotoAppWidgetSettingsProxy(String name, Context context) { 
     super(name, context);  
     mCtx = context; 
     pref = context.getSharedPreferences(PREFERENCES_NAME, PREFERENCES_MODE); 
     editor = pref.edit(); 
    } 


    private final static String FRAME = "FRAME"; 

    /** 
    * Sets selected frame mode 
    * @param frame id 
    */ 
    public void setFrameMode(int frameId){ 
     editor.putInt(FRAME, frameId); 

     Log.d(PREFERENCES_NAME, "SET MODE="+frameId); 
     boolean success = editor.commit(); 
     Log.d(PREFERENCES_NAME, "SET MODE="+success); 
    } 
    /** 
    * Gets selected frame mode 
    * @return frame id 
    */ 
    public int getFrameMode(){ 
     Log.d(PREFERENCES_NAME, "GET MODE="+pref.getInt(FRAME, 0)); 
     return pref.getInt(FRAME, 0); 
    } 

解決しよう:共有設定/値にアクセスするとき

private final static int PREFERENCES_MODE = Context.MODE_MULTI_PROCESS; 
+0

コンテキストとは関係ありません。値を正しく設定していない可能性があります。 – ngesh

+0

値を正しく設定していますか。 Commitはtrueを返します。そして、同じパッケージからこれらの設定を取得しようとすると、私は最新の値を得ました。質問に私のラッパークラスを見てください。ちょうどそれを付けました。 –

+0

「パッケージ」とはどういう意味ですか? 2つの異なるアプリを意味しますか? –

答えて

3
private final static int PREFERENCES_MODE = Context.MODE_MULTI_PROCESS; 
2

を、私はそれが便利なアプリケーションを拡張するCustomApplicationクラスを記述することが分かってきました。私はそこに任意の必要なフィールド/メソッドを置き、簡単に使用することにより、他のAndroidのクラスのいずれかからそれらを取得することができます

CustomApplication app = (CustomApplication) getApplication(); 
int x = app.getX(); 

んすべてであなたを助けること?

+1

私はちょうどgetApplication()を間接的に呼び出すべきではないことをこのサイトから読みました:) –

+0

それは面白いです!あなたはそれに私をリンクできますか? – breadbin

+1

これはリンクです - http://stackoverflow.com/questions/5018545/getapplication-vs-getapplicationcontext、私はgetApplicationとgetApplicationContext()を間違って配置しました。私の悪い。 –

関連する問題