话说今天是5.4青年节,听朋友说他们公司会给27岁以下的员工放半天假,听完之后。感觉自己都是“大叔级别”了。我瞬间凌乱。。。不叨叨了,5.4是年轻人的节日。大叔程序员伤不起啊。最后打算写篇博客压压惊。
相信这种需求在如今的app中是非常常见的,每日首次登录会领取一定的积分,为app带来一定的用户粘度。今天来实现以下这个需求:
首先这里先给出一个大致的思路,就是首先我们的保存一个最后退出的时间,然后每次app进入的时候再拿到我们之前保存退出的时间,和当前的时间进行对比,如果相同则是同一天内登录,反之。思路理清了,剩下的就是填空题了。
1,这里我们利用android提供的一种轻量级数据存储SharedPreferences进行数据存储。对SharedPreferences的用法不熟悉的童鞋可以参考我之前的一篇博客Android当中数据存储之SharedPrefernces存储。
2.首先当我们每次进入时获取之前存储的时间,这里直接上我自己写的一个方法,注释都很全直接看
/**
* 判断是否是当日第一次登陆
*/
private void isTodayFirstLogin() {
SharedPreferences preferences = getSharedPreferences("LastLoginTime", MODE_PRIVATE);
String lastTime = preferences.getString("LoginTime", "2017-04-08");
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
todayTime = df.format(new Date());
if (lastTime.equals(todayTime)) {
Toast.makeText(this, "不是当日首次登陆", Toast.LENGTH_SHORT).show();
Log.e("Time", lastTime);
} else {
Toast.makeText(this, "当日首次登陆送积分", Toast.LENGTH_SHORT).show();
Log.e("date", lastTime);
Log.e("todayDate", todayTime);
}
}
这里解释一下
String lastTime = preferences.getString(“LoginTime”, “2017-04-08”);
这个为什么后面还有个”2017-04-08”。这个是考虑到安装app的时候第一次我们没有存储退出的时间,所以就当取不到数据的时候给他一个默认值。这样当app第一次安装的时候默认判断是第一次登录的。
3.然后退出时间保存我是在onDestroy()的时候进行保存
@Override
protected void onDestroy() {
super.onDestroy();
saveExitTime(todayTime);
}
/**
* 保存每次退出的时间
* @param extiLoginTime
*/
private void saveExitTime(String extiLoginTime) {
SharedPreferences.Editor editor = getSharedPreferences("LastLoginTime", MODE_PRIVATE).edit();
editor.putString("LoginTime", extiLoginTime);
editor.apply();
}
就是这么简单完成了。 |