Mel*_*Mel 14 android preferences sharedpreferences
我在Google Play市场上有一款应用.由于各种原因,我不打算进入,我已经改变了我的一些偏好的类型.例如,首选项类型是Integer,在最新版本中它现在是String.我想这不是一个好习惯,但不幸的是我不得不这样做.
我担心的是,当有人更新新版本时,他们的应用会因偏好类型发生变化而崩溃.出于这个原因,我想在应用程序更新时清除首选项(再次,我意识到不理想!)
这可能吗?
Bal*_*des 19
该SharedPreferences.Editor班有一个clear()功能,什么删除所有存储的偏好(后commit()).您可以创建一个布尔标志,指示是否需要更新:
void updatePreferences() {
SharedPreferences prefs = ...;
if(prefs.getBoolean("update_required", true)) {
SharedPreferences.Editor editor = prefs.edit();
editor.clear();
/*....make the updates....*/
editor.putBoolean("update_required", false)
editor.commit();
}
}
Run Code Online (Sandbox Code Playgroud)
之后,您需要在访问任何首选项之前在主(首次启动)活动中调用此方法.
编辑:
要获取当前版本(清单中声明的versionCode):
int version = 1;
try {
version = getPackageManager().getPackageInfo(getPackageName(), 0).versionCode;
} catch (NameNotFoundException e) {
e.printStackTrace();
}
if(version > ...) {
//do something
}
Run Code Online (Sandbox Code Playgroud)
编辑
如果你想做一些更新操作,只要版本发生变化,你就可以这样做:
void runUpdatesIfNecessary() {
int versionCode = getPackageManager().getPackageInfo(getPackageName(), 0).versionCode;
SharedPreferences prefs = ...;
if (prefs.getInt("lastUpdate", 0) != versionCode) {
try {
runUpdates();
// Commiting in the preferences, that the update was successful.
SharedPreferences.Editor editor = prefs.edit();
editor.putInt("lastUpdate", versionCode);
editor.commit();
} catch(Throwable t) {
// update failed, or cancelled
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8964 次 |
| 最近记录: |