Android - SharedPreferences 的 getString 打印默认值

Android - SharedPreferences's getString prints the default value

我试过保存字符串TRUE,马上调用查看是否保存成功,结果一直吐0,这是默认值。我的代码有什么问题?

SharedPreferences settings = getSharedPreferences("PREFS", 0);
SharedPreferences.Editor editor = settings.edit();
editor.putString("doublePoint", "TRUE");
String doublePoint = settings.getString("doublePoint", "0");
Toast.makeText(getApplicationContext(), doublePoint,Toast.LENGTH_LONG).show();

您必须添加 editor.commit() 才能保存它:

SharedPreferences settings = getSharedPreferences("PREFS", 0);
SharedPreferences.Editor editor = settings.edit();
editor.putString("doublePoint", "TRUE");
editor.commit(); // This command saves the data

String doublePoint = settings.getString("doublePoint", "0");
Toast.makeText(getApplicationContext(), doublePoint, Toast.LENGTH_LONG).show();

编辑:如 Tyler V 评论中所述,您有两个解决方案:

  • commit():如果新值写入成功,这将保存值和 return true。该操作在 Main Thread 上执行,如果操作时间过长,您可能会遇到冻结。

  • apply():这会立即将更改保存到内存中 SharedPreferences,但会启动异步提交到磁盘,您不会收到任何失败通知。

PS:如果您已经忽略 return 值,则可以安全地将 commit() 的任何实例替换为 apply()

来源:https://developer.android.com/reference/android/content/SharedPreferences.Editor.html#apply()

在 SharedPreferences 中输入值后,您需要添加 commit()。只需以这种方式添加一个:

SharedPreferences settings = getSharedPreferences("PREFS", 0); 
SharedPreferences.Editor editor = settings.edit().commit();
editor.putString("doublePoint", "TRUE"); 
String doublePoint = settings.getString("doublePoint", "0"); 
Toast.makeText(getApplicationContext(), doublePoint, Toast.LENGTH_LONG).show();

有关详细信息,请查看此 example