【问题标题】:Date change detection on application start up - Android应用程序启动时的日期更改检测 - Android
【发布时间】:2012-04-12 14:57:31
【问题描述】:

我是 Android 编程新手,在这个论坛上可能会在几秒钟内解决一个挑战。

我试图弄清楚如何在启动期间启用应用程序以检测自上次启动以来日期是否已更改。

当日期更改时,我打算更改文本视图中的值。但是,如果没有,则 textview 不会改变。 - 我知道如何创建这个函数但是卡在日期更改问题上?

我已经阅读了警报管理器,但不确定这是必需的,因为它不需要仅在启动期间的特定时间发生。

任何建议将不胜感激。

谢谢,

p.s 我正在创建一个基本报价应用程序,并希望包含当天页面的报价。为此,我需要知道日期是否已更改,以便应用程序更改报价

【问题讨论】:

  • 我不明白这个问题
  • 我正在创建一个基本报价应用程序,并希望包含当天页面的报价。为此,我需要知道日期是否已更改以便应用程序更改报价,我希望这是有道理的
  • 是的,确实如此。您可能可以将日期(日历中的 DAY_OF_YEAR)和年份存储在 SharedPreferences 中,并在 Activity 启动期间比较值

标签: android date android-intent alarmmanager


【解决方案1】:

你需要的是:
一个SharedPreference,具有描述最后日期的长值。
一个Calendar

当您的 Activity 开始时(在 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();
}

【讨论】:

  • 在极不可能发生的情况下,有人自去年以来就没有查看过这个应用程序,并且碰巧在一年中的同一天打开它,它会打破这个逻辑 :) 年份也应该被存储为那个荒谬的案例:P(对不起..不得不哈哈)
  • @dymmeh,这是正确的,我考虑过包含一些内容,但这完全取决于“每日报价”应该如何工作,如果有 365 个(366 个?)报价,一个对于一年中的每一天,这都不是问题。否则,您可能会计算自某一天以来经过的天数并比较这些值。
  • 非常正确,如果引号永远不会改变。我原以为他会从服务器获取它们,但我想我假设太多了。
  • 我正在使用一个预编译的 SQLite 数据库,它包含所有适当的值。因此,在极不可能的情况下,这可能会发生。
  • 请问我该如何在 sharedpreference 中保存日期?
【解决方案2】:

在应用启动时执行此操作:

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
    }
}

【讨论】:

  • 这行不通。 getTime 是毫秒,并且一直在变化。
  • 是的,我很快就做到了。查看 Android javadoc 以了解如何使用 Date()。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-08
相关资源
最近更新 更多