【问题标题】:Read shared preference when context is changed更改上下文时读取共享首选项
【发布时间】:2012-04-11 12:36:15
【问题描述】:

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

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

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

所以看起来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;

【问题讨论】:

  • 它与上下文无关..可能是您没有正确设置值
  • 我确实正确设置了值。提交返回真。当我尝试从同一个包中获取这些偏好时,我得到了最新的值。请在问题中查看我的包装类。刚刚附上。
  • “包”是什么意思?您是指两个不同的应用程序吗?
  • 只是两个不同的 Java 包。
  • 你是从同一个进程中读取设置吗?

标签: android sharedpreferences


【解决方案1】:
private final static int PREFERENCES_MODE = Context.MODE_MULTI_PROCESS;

【讨论】:

    【解决方案2】:

    在访问共享首选项/值时,我发现编写一个扩展 Application 的 CustomApplication 类很有用。我可以在其中放置任何必要的字段/方法,并通过以下方式轻松地从任何其他 Android 类中获取它们:

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

    这对你有帮助吗?

    【讨论】:

    • 我刚从这个网站上读到你不应该明确地调用 getApplication() :)
    • 这很有趣!你能把我链接到那个吗?
    • 这是链接 - stackoverflow.com/questions/5018545/…,但我放错了 getApplication 和 getApplicationContext()。我的错。
    • 谢谢!我的评论对你有帮助吗?
    • 实际上,没有;)但我自己想通了,如果您对此感兴趣,请参阅上面的问题。并感谢您的回复:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    相关资源
    最近更新 更多