写这篇文章在半个月前就打算写,后来因为比较忙,赶项目,然后端午节回家一趟有事给耽误了,今天终于有时间可以补这个篇文章给补上了。
首先说明这个功能要求:
1、首先能够根据数据的首字母进行排序显示,类似于通讯录一样;
2、能够在搜索栏输入关键字进行按关键它检索,并且按规定的顺序对关键字进行排序;
3、对搜索出来的数据包含关键的内容关键字进行高突出显示。
4、输入的关键字时时自动更新检索的内容
这个功能的来源:
由于用户数量比较多,简单的根据首字母来检索速度还是不够快,所以添加关键字自动检索功能,为了突出检索内容,所以将关键高亮显示。并且需要按关键字在内容中的位置先后顺序来进行排序。
没有动手做之前,开始以为这个按关键字在内容在的位置排序是可以通过sql语句来实现的。。。确实是可以通过sql语句实现,但这只是部分数据库可以支持。这也是接下来进走过的哪些坑。
MySql数据库有直接实现的函数,而oracle和sqlite数据库也有,对,没错,android支持的sqlite数据库也有,但是。。。只是5.0及以上的版本支持,有个instr函数,直接order by就可以实现这个小功能,但是5.0以前的版本呢???所以不得不换一个实现方式。后来没有办法只能先把数据按关键字模糊查询出来,然后再按规则进行在内存中进行排序,这样就解决了这个问题。但是当时没有考虑数据多的情况,到后现发现,数据量一多,模糊查询,尤其是%%这种查询真是慢的要死。没有办法只能又想了一个投机的办法,我给他来个limit,这时瞬间就好了,因为输入的数据是手机号码,全中国的移动手机号码都是1开头的,一个通讯录里面1开头的电话号码该有百分之九十吧。所以来个Limit不管你了,输的关键字越多结果越少。