Android 更改上下文时读取共享首选项

Android 更改上下文时读取共享首选项,android,sharedpreferences,Android,Sharedpreferences,我有一个DialogView,它将设置存储在共享首选项中。它位于包A中,我还有另一个活动位于包B中,应该能够读取这些首选项 所以我创建了一个包装器类,它接受上下文和共享首选项名称并检索这些设置。当第一次设置共享首选项时,一切都很好,但是当我更改它时,我得到了第一次设置的相同结果 问题是我在一个进程中保存了首选项,并且需要能够在另一个进程中读取它们 因此,似乎上下文已更改,我无法检索新上下文。我应该做什么来更新共享首选项 提前谢谢你 请看一下我的包装器类 public class PhotoApp

我有一个DialogView,它将设置存储在共享首选项中。它位于包
A
中,我还有另一个活动位于包
B
中,应该能够读取这些首选项

所以我创建了一个包装器类,它接受上下文和共享首选项名称并检索这些设置。当第一次设置共享首选项时,一切都很好,但是当我更改它时,我得到了第一次设置的相同结果

问题是我在一个进程中保存了首选项,并且需要能够在另一个进程中读取它们

因此,似乎
上下文
已更改,我无法检索新上下文。我应该做什么来更新共享首选项

提前谢谢你

请看一下我的包装器类

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;

在访问共享首选项/值时,我发现编写CustomApplication类扩展应用程序非常有用。我可以在其中放置任何必要的字段/方法,并使用以下工具从任何其他Android类轻松获取它们:

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

这对你有帮助吗?

这与上下文无关。。可能是您没有正确设置值。我确实正确设置了值。Commit返回true。当我试图从同一个包中获取这些首选项时,我得到了最新的值。请看一下我在问题中的包装类。刚刚附上。你说的“包裹”是什么意思?你是说两个不同的应用程序吗?只是两个不同的Java软件包。你是从同一个过程中读取设置的吗?我只是从这个网站上读到,你永远不应该调用getApplication(),这很有趣!你能把我链接到那个吗?这是链接-,但我放错了getApplication和getApplicationContext()。我的错,谢谢!我的评论对你有帮助吗?事实上,没有;)但是我自己想出来的,如果你感兴趣的话,请看我上面的问题。感谢您的回复:)
private final static int PREFERENCES_MODE = Context.MODE_MULTI_PROCESS;