我有一个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
文件夹中的真实值。
我该怎么办?
答案 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,但会启动异步提交到磁盘,并且您不会收到任何失败的通知