2017-06-28 66 views
0

我有一个Sharedpreferences检查用户是否已经激活与InAppPurchase亲节,每Mainactivity被打开时我检查一下,像这样:sharedpreferences值不更新

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); 
+0

谢谢,但我知道这些,我的价值只是不更新​​时,我用文件管理器手动更改文本编辑器。 –

+0

@PooyaTaheri你的设备是否生根? –

+0

的cource,否则我wouldnt能够更改手动共享首选 –

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); 
} 
+0

考虑使用apply()来代替; commit立即将其数据写入永久存储器,而apply会在后台处理它。 – jaffar

+0

谢谢,但我知道这些,我的价值只是没有更新时,我用文本编辑器手动更改它 –

0

尝试使用

editor.apply(); 

而不是

editor.commit(); 

不像提交(),其出持久性存储同步写入其首选项,适用()提交其更改为内存立即使用SharedPreferences,但启动对磁盘的异步提交,并且不会收到任何失败通知。

+0

谢谢,但我知道这些,我没有问题把价值,我的问题是获取值 –