具有到期日期的共享偏好

时间:2014-11-13 14:20:09

标签: android android-studio sharedpreferences

是否可以将sharedpreferences键与过期日期放在一起?

例如,如果我需要保存用户ID号,但我希望它在一天之后被“遗忘”......

今天我为此目的使用字符串的键:当我保存字符串时,我将键设置为“id_”,当我的应用程序启动时,我会查看所有我的首选项键(getAll())并寻求一个以“id_”开头的键,然后我解析尾随日期以确定我是否需要保留它。

有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

您可以存储两个首选项:一个用于值,另一个用于指定其过期。例如:

long expires = prefs.getLong("id_expiration", 0);
if(System.currentTimeMillis() < expires){
    //still valid
    String id = prefs.getString("id_value", "");
}

或者,如果您的偏好值始终具有已知格式,则可以连接值&amp;到期为一个字符串并存储它。例如:

String[] id = prefs.getString("id", "0:0").split(":");
if(id.length == 2 && System.currentTimeMillis() < Long.parseLong(id[1])){
    //still valid
    String id_value = id[0];
}

最后,您可以使用实现Serializable的对象,或者使用JSON,并将其写入字符串pref。

答案 1 :(得分:0)

AFAIK,没有直接的方式让Android为您清理您的偏好。但是,您可以做的是在您的偏好中包含您存储的日期。例如,如果要存储JSON对象,则可以存储:

{
   value: 'xxx',
   expiration: 'yyyy-dd-mm'
}

然后从首选项中检索对象后解析日期:

String json = prefs.getString(id);
try {
  JSONObject obj = new JSONObject(json);
  String date = obj.getString("expiration");
  // Parse the date string and check to make sure it isn't expired.
} catch (JSONException e) {
  // Handle exception
}