【问题标题】:Preference value which is updated in sync adapter is not reflecting in my app在同步适配器中更新的首选项值未反映在我的应用程序中
【发布时间】:2018-01-23 06:56:26
【问题描述】:

我的 Android 应用中有一个同步适配器,我在共享首选项中保存了一些数据。

让我以时间戳为例进行解释,在同步适配器中我存储时间戳,当我打开/使用我的 android 应用程序时,数据仍然显示旧数据。

我正在使用下面的代码,

public void saveTimeStamp(long timestamp) {
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putLong("timestamp", timestamp);
        editor.apply();
    }

public long getLoginTimestamp() {
        return sharedPreferences.getLong("timestamp", 0);
    }

我尝试从应用程序中调用相同的方法并且它正在更新。即使我调试并检查它也从同步适配器调用上述方法,但数据没有更新。

在同步适配器中,我检查了记录数据,它已正确记录,但在应用程序中未反映。我认为它对同步适配器和应用程序采取了不同的偏好设置,因为两者都将处于不同的进程中

【问题讨论】:

  • 您如何在同步适配器中获取SharedPreferences 对象,以及如何在应用程序中获取?
  • @MikeM。我有一个单例类,我通过传递一个上下文来调用那个类。我在应用程序和同步适配器服务中使用相同的类
  • @MikeM。我尝试调试和记录。现在我开始知道,对于同步适配器,它采用单独的偏好,而对于应用程序,它采用单独的偏好。我该如何处理这个
  • 看看这篇文章:stackoverflow.com/q/26408622.
  • @MikeM。谢谢,现在可以正常使用了

标签: android asynchronous service


【解决方案1】:

我得到了解决方案,

我正在使用

sharedPreferences = context.getSharedPreferences(
                    context.getString(R.string.preference_name),
                    Context.MODE_PRIVATE);

现在我改成

sharedPreferences = context.getSharedPreferences(
                    context.getString(R.string.preference_name),
                    Context.MODE_MULTI_PROCESS);

同步适配器和应用程序将在不同的进程中运行。如果我们必须使用相同的首选项,那么我们必须传递 Context.MODE_MULTI_PROCESS 而不是 Context.MODE_PRIVATE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-03
    • 2011-01-11
    • 2016-12-12
    • 2011-07-26
    • 1970-01-01
    • 2014-12-15
    • 2011-07-27
    • 1970-01-01
    相关资源
    最近更新 更多