sharedpreferences值未更新

时间:2017-06-28 12:21:39

标签: android sharedpreferences

我有一个Sharedpreferences来检查用户是否已使用InAppPurchase激活了专业版部分,并且每次打开Mainactivity时都会检查它,如下所示:

SharedPreferences s = c.getSharedPreferences("app" , MODE_PRIVATE);
String value = s.getString(key , " ");
Log.i("myapp" , value);

如果有人试图手动更改值,我的应用会警告他。所以我尝试测试我的应用的安全性,并使用data/data/com.myapp.package/shared_prefs/的文本编辑器手动更改值让我们说值为39m49ur3。我将其更改为87mjr83。然后我启动了应用程序,日志stil中的值为39m49ur3。我关闭了应用程序并再次启动它但没有看到任何变化,除非我清除设备的RAM然后启动应用程序,最后我从日志中获得的值是shared_prefs文件夹中的真实值。 我该怎么办?

3 个答案:

答案 0 :(得分:0)

像这样保存,

SharedPreferences pref = c.getSharedPreferences("app", MODE_PRIVATE);
Editor editor = pref.edit();
editor.putString("myapp", "string value"); 
editor.commit(); 

得到这样,

pref.getString("myapp", null); 

答案 1 :(得分:0)

//在共享偏好中保存字符串

 public void put(String key, String value) {
    mSharedPreferences.edit().putString(key, value).apply();
}

//从共享偏好中获取价值

 public String get(String key, String defaultValue) {
    return mSharedPreferences.getString(key, defaultValue);
}

答案 2 :(得分:0)

尝试使用

editor.apply();

而不是

editor.commit();
  

与commit()同步地将其首选项写入持久存储,apply()会立即将其更改提交到内存中的SharedPreferences,但会启动异步提交到磁盘,并且您不会收到任何失败的通知