我正在尝试创建一个允许用户每天只访问一些信息的应用程序,以向用户显示他必须等多久才能再次看到该信息。
这是我的代码:
long aux_time = prefs.getLong("AUX",System.currentTimeMillis());
Log.v(TAG, "aux=" + aux_time);
Log.v(TAG, "time" + System.currentTimeMillis());
if(System.currentTimeMillis() > aux_time + (10000 * 60 * 60 * 24))
{
finish();
Intent intent = new Intent(Castle.this, Hug.class);
startActivity(intent);
}
if (System.currentTimeMillis() >= aux_time + (10000 * 60 * 60 * 24))
{
SharedPreferences.Editor editor = prefs.edit();
editor.putLong("AUX", System.currentTimeMillis());
editor.commit();
finish();
Intent intent = new Intent(Castle.this, Hug_Accepted.class);
startActivity(intent);
}
我测试了代码。而且,我相信它会在24小时后打开,但是当我第一次打开Activity时它不会打开,因为当我在第二个if中比较它们时,它们之间的差异为0.00000000001 ms。有什么想法吗?
答案 0 :(得分:1)
if
(System.currentTimeMillis() > aux_time + (1000 * 60 * 60 * 24))
。
在这里检查当前时间是否大于aux_time
至少24小时。答案 1 :(得分:0)
好吧,你在应用程序中所做的就是拥有某种数据库或本地文件来跟踪日常使用情况。因此,例如,如果您的数据库包含列“id”,“lastViewed”(以mills为单位的时间或以字符串形式的日期)。
现在每次运行主活动时,在onCreate中检查数据库是否为lastvised是昨天还是更早,如果没有则显示用户相应的消息,否则让用户进入并在数据库中标记日期和时间。
答案 2 :(得分:0)
您的代码非常奇怪,首先,您在某些if-block中调用finish()
,而不是return;
,这意味着您将继续评估下一个if-block(在您可以在其中检查millis == aux_time
是否设置了k=1
,这意味着将始终运行下一个块k==1
。
其次,你要比较时间(以毫秒为单位)System.currentTimeMillis()==aux_time
将永远不会为真,除非被调用两次相同的毫秒,但也许我误解了你的代码?
答案 3 :(得分:0)
这是我的代码的工作版本。
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
long aux_time = prefs.getLong("AUX",0);
Log.v(TAG, "aux=" + aux_time);
Log.v(TAG, "time" + System.currentTimeMillis());
if(aux_time==0)
{
SharedPreferences.Editor editor = prefs.edit();
editor.putLong("AUX", System.currentTimeMillis());
Log.v(TAG, "aux2" + aux_time);
editor.commit();
//Open restricted activity
}
if(System.currentTimeMillis() < aux_time + (10000 * 60 * 60 * 24))
{
//Open the "Not Allowed" activity
}
if(System.currentTimeMillis() > aux_time + (10000 * 60 * 60 * 24))
{
SharedPreferences.Editor editor = prefs.edit();
editor.putLong("AUX", System.currentTimeMillis());
Log.v(TAG, "aux2" + aux_time);
editor.commit();
//Open the restricted one
}