百度云消息推送

来源:互联网 发布:网络兼职英语教师招聘 编辑:程序博客网 时间:2024/05/16 17:56
这两周没怎么写文章,梳理一下这两周的东西吧。
任务:主要实现的功能是消息推送,使用的是百度云推送SDK,接收服务端的发送的消息和通知,并把这些消息显示在listview中,已读消息和未读消息要有明显的标识。
难点:区分已读和未读消息这个功能。一般是通过服务端发送的数据中的一个字段来判断消息的已读和未读,但是我做的这个服务端返回的数据中没有标识消息状态的字段,所以实现这个功能就需要自己来想办法了。
思路:通过在手机本地建立数据表,来记录消息已读未读的状态。创建消息数据表message,设置四个字段_id(自增,主键),userID(用户id,VARCHAR(255) ,由于项目项目中设置的类型是UUID于是其他表中是这样设置的照搬),createTime ( 消息id,DateTime,项目中这样设置的照搬 ),status(消息状态,int ,默认1 已读1,未读 0)
问题:
1.当第一次点开该消息Activity时,加载数据,同时把这些数据插入到数据库。当离开该消息Activity又重新回到该消息Activity时,需要重新查找数据库中是否存在该数据,若为2,不存在则插入该条记录,如果存在则返回该条记录的status,若为0未读,则在messageAdapter中让该条记录的前面显示绿点;若为1,则在messageAdapter中让该条记录的前面显示绿点;避免每次进来重复插入数据。
2.当点击listview中未读消息item时,让其绿点变为灰点,同时把数据库中该条记录的status改为1。原来思路通过useID和createTime来定位一条消息然后改变它的status,但是sqlite中update不能这样用,update语句中where后条件一般为主键,所以,另一个方法是先根据 createTime来查询,可能多条不同useID的记录,领这多条消息的useID和_id,status 用数组保存下来,然后比较这些记录的useId,找出与当前useID一致的消息,得到其_id,然后根据id 进行update。
3.数据库的问题一般是思路问题,还有就是createTime的存储和传值,因为他的类型是Datetime,所以传值时容易报异常。
4.消息推送时,客户端要接收服务端传来的数据,因其传的参数是jsonobject,所以接收时要把他们一步步转化为数组。
未解决:
1.消息Activity页面使用的是StickyListHeadersListView,同时SwipeRefreshLayout刷新,所以当点击item时跳转到另一个页面,但是再回来时消息要再次加载,就不能定位到原来的位置了,
2.listview上拉加载数据时,会抛出异常,java.lang.illegalArgumentExcaption:invail UUID。估计是从服务端接收数据解析时出现了问题。
心得:
1.项目中实现的所有的功能都是别人已经写好的,几乎没有自己创造的,复制粘贴下代码就OK了。但是,这种机械的复制粘贴并不是主要的目的。就像工作经验和时间也不是绝对的成正比一样,关键是你从这种复制粘贴中学到了什么。很多情况下把代码复制到自己的项目中是有错误的,解决错误的方法,思路,及效率才是学习的重点!
2.遇到问题时,先猜想!!!理清思路,根据错误提示猜想可能是那里出问题了,可能是什么造成的,找出错误的大致点,这样才能够快速的定位问题,解决问题。
0 0
原创粉丝点击