本系列的第三篇,这一篇我们来学习下LitePal数据库的使用,LitePal数据库是安卓大神郭霖维护的项目,大家可以去学习下,下面是他在CSDN专栏讲解的地址的地址。
专栏:Android数据库高手秘籍 - 博客频道 - CSDN.NET http://blog.csdn.net/column/details/android-database-pro.html
按照教程提示我们一步一步集成LitePal,其中最主要的几步配置如下
看一下我的配置litepal.xml
<?xml version="1.0" encoding="utf-8"?> <litepal> <dbname value="jPush_data" ></dbname> <version value="1" ></version> <list> <mapping class="com.cjt.customcalendar.datas.JPushData"/> </list> </litepal>
基本上配置到这里就可以正常使用数据库了,至于其他具体的操作细节,大家可以去看郭大神的专栏讲解,我就不在这里啰嗦了,好了下面看下我的使用,首先在接受数据的广播中就保存数据
然后再MainActivity中自定义日历的每日的点击事件主公调用数据库查询的方法,查询当天保存的推送消息的内容,并且显示出来,如下所示
这里讲一下查询的逻辑实现:我是根据点击传入的Date()日期进行查询的,所以数据库保存数据的时候(Receiver中)用的是Date()类型的数据,但是查询的时候用Date()类型比较麻烦,首先java.util.Date包含了年月日时分秒星期等数据,直接转换成String类型来查肯定出错,事实上我在这里也掉坑里了,查了好久都没数据出来,因为根本不可能查到,保存和查询之间总有秒的差别!!!
在这里我想了个笨办法,日历点击的时候我只需要关注点击的是那一天(xxxx年xx月xx日),然后根据这个具体天去查询数据库中对应的年月日保存的数据即可,所以我先要将点击传入的Date类型转换成需要的类型“yyyy-MM-dd”,当然数据库中是没有这种类型的,那我就自己创造一种类型——在JPushData中保存的是Date(),我在这里创造了自己约定需要的类型“yyyy-MM-dd"(String day),保存的时候直接从Date()中取值,然后set,get进day中,查询的时候只关注传入的Date()的年月日是否等于数据库中day(where day like %2017-05-19%)这一列中保存的数据。如果有相同的就添加进List集合中,然后显示在日历控件的下面。
看下效果图:
补充一点:大家看到的日历中选中颜色发生变化是我为了区分效果加上的,打击还可以更加细致的完善下UI界面,我是在这里加的。
好了,基本上到这里就已经是实现了第一篇中我想要的功能了,但是突然灵光一闪(脑洞大开),想集成个好玩的API进来,也算是让菜鸟(我也是菜鸟)能体味开发的乐趣,至于什么样的API,留待下回见分晓。
大家早点消息吧!!!