【问题标题】:Shared preferences don't persist when app restarts应用重新启动时共享偏好设置不会持续存在
【发布时间】:2013-04-03 16:07:12
【问题描述】:

我正在制作一个应用程序,希望用户能够保存他们的偏好。我正在使用这样的共享首选项:

private void writeSettings(String val){
PreferenceManager.getDefaultSharedPreferences(context).edit().putString("status", val).commit();
        Log.d("stat", val);
}

这很好用,阅读也很好。如果我关闭应用程序并重新启动它,它就消失了。除非删除应用程序,否则不应该保存首选项吗?

【问题讨论】:

  • 你在哪里调用 writeSettings 方法?
  • 只有在尝试手动清除应用程序数据时才会删除共享首选项数据。
  • 我想我在某处看到提交在链接时不起作用。
  • @raybritton 这就是问题所在

标签: java android sharedpreferences


【解决方案1】:

你在哪里调用 writeSettings 方法?如果在 onStop() 或 onDestroy() 中,有时这些不会被调用。如果是这种情况,请将您的代码添加到 onPause()。

除此之外,您可以尝试将它们保存在链中,如下所示:

// save string in sharedPreferences 
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor editor = settings.edit();
editor.putString("some_key", value); // here value is the string you want to save
editor.commit();                    

// restore string in sharedPreferences (usually you have this onCreate method) 
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
String string = settings.getString("some_key", "");

【讨论】:

  • 它不是 on destroy,它基本上是停止/启动广播接收器,因此他们几乎可以将其关闭。
  • 你不能用java链? (我习惯于网络编程)
  • 工作了..我想知道为什么链接方法会导致问题?
  • @Marko Niciforovic:您以哪种方法保存共享首选项?我尝试了 onDestroy()、onPause()、onStop()。他们都没有保存数据。:(
  • @MAHANTESH 您可以将它们保存在您想要的任何函数中,只需确保调用该函数即可。您可以通过添加日志并检查您的 logcat 来确定您的函数是否被调用。如果日志在那里,那么您在共享首选项方面做错了。 :)
【解决方案2】:

您必须使用 commit() 方法将更改保存在 sharedprefernce 中的一致状态。

请参考:http://developer.android.com/reference/android/content/SharedPreferences.html#edit%28%29

【讨论】:

  • 我确实使用了 commit()。问题是我在链接方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-10
  • 2012-07-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多