2012-04-12 2 views
1

Я новичок в программировании на Android и сталкиваюсь с проблемой, которая, вероятно, может быть решена за считанные секунды на этом форуме.Обнаружение изменений даты при запуске приложения - Android

Я пытаюсь выяснить, как включить приложение во время запуска, чтобы определить, изменилась ли дата с момента последней загрузки.

Когда дата изменилась, я намерен изменить значение в текстовом виде. Однако, если это не так, текст не изменится. - Я знаю, как создать эту функцию, но застрял в проблеме изменения даты?

Я, однако, прочел на будильника, но не уверен, что это требуется, так как это не должно происходить в определенное время только во время загрузки.

Любой совет будет оценен.

Спасибо,

p.s Я создаю основную цитату приложение и хочу включить цитату страницы дня. Для того, чтобы сделать это, мне нужно знать, изменилась ли дата для того, чтобы приложения, чтобы изменить котировка

+0

Я не понимаю вопроса – njzk2

+0

Я создаю основное приложение для цитат и хочу включить цитату дневной страницы. Чтобы сделать это, мне нужно знать, изменилась ли дата, чтобы приложение изменило котировку, я надеюсь, что это имеет смысл. – user983965

+0

да, это так. вы, вероятно, можете сохранить день (DAY_OF_YEAR в календаре) и год в SharedPreferences и сравнить значения во время запуска активности – njzk2

ответ

4

Что вам нужно это:
A SharedPreference с длинной стоимостью, описывающей последнюю дату.
A Calendar.

Когда начинается ваша деятельность (в методе onCreate()), вы можете получить новый Calendar. Он будет иметь текущую дату, и вы можете извлечь день:

Calendar c = Calendar.getInstance(); 
int thisDay = c.get(Calendar.DAY_OF_YEAR); //You can chose something else to compare too, such as DATE.. 
long todayMillis = c.getTimeInMillis(); //We might need this a bit later. 

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

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 
long last = prefs.getLong("date", 0); //If we don't have a saved value, use 0. 
c.setTimeInMillis(last); 
int lastDay = c.get(Calendar.DAY_OF_YEAR); 

if(last==0 || lastDay != thisDay){ 
    //New day, update TextView and preference: 
    SharedPreferences.Editor edit = prefs.edit(); 
    edit.putLong("date", todayMillis); 
    edit.commit(); 
} 
+0

в супер маловероятном случае кто-то не просматривал это приложение с прошлого года и, случается, откроет его в тот же день года, что он нарушит эту логику :) год должен храниться и за этот смешной случай: P (извините .. должен был хаха) – dymmeh

+0

@dymmeh, это правильно, и я подумал о том, чтобы включить что-то в это, но все зависит от того, как должна работать «цитата дня», если есть 365 (366?) котировок, один для каждый день в году, это не проблема. В противном случае можно было бы рассчитать количество дней, прошедших с определенного дня, и сравнить эти значения. – Jave

+0

Очень верно, если котировки никогда не меняются. Я ожидал, что он соберет их с сервера, но я предполагаю, что я слишком много думал. – dymmeh

0

ли вы, что при запуске приложения:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this) 

if (prefs.getBoolean("firstLaunch", true)) 
{ 
    SharedPreferences.Editor editor = prefs.edit(); 
    editor.putBoolean("firstLaunch", false); 
    editor.putInt("date", new Date().getTime()); 
    editor.commit(); 
} 
else 
{ 
    if (new Date().getTime() != prefs.getInt("date", 0)) 
    { 
      // Do something 
    } 
} 
+0

, это не сработает. getTime - миллис, и все время меняется. – njzk2

+0

Да, я сделал это быстро. Проверьте Android javadoc, чтобы узнать, как использовать Date(). – Manitoba

Смежные вопросы