2014-11-13 5 views
2

можно ли поставить ключ sharedpreferences с датой истечения срока действия?sharedpreferences с датой окончания срока действия

Например, если мне нужно, чтобы сохранить число пользователей ID, но я хочу, чтобы это было «забыто» через день ...

сегодня я использую ключ строки для этой цели: когда я сохраните строку, которую я установил, чтобы ключ был «id_», и когда мое приложение начинает, я просматриваю все мои настройки (getAll()) и ища ключ, который начинается с «id_». Затем я анализирую конечную дату, чтобы найти если мне нужно это сохранить или нет.

есть ли лучший способ?

+0

Я бы сказал, в том числе дата/время когда вы храните его, а затем разбираете его, когда вы его извлекаете, должно быть достаточно легко и работать. – Galax

ответ

2

Вы можете сохранить два варианта: один для значения и другой, указывающий его истечение. Например:

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

В качестве альтернативы, если значение предпочтения всегда будет иметь известный формат, можно сцепить истечение значения & в одну строку и сохранить ее. Например:

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, и записать его в строку прив.

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 
} 
Смежные вопросы