zoukankan      html  css  js  c++  java
  • 完美解决android监听联系人数据变化

    先说说原理,大家知道,android可以对数据库进行监控。但是个人感觉这个监控不给力,无论怎么实现监控,最后返回的结果是数据库是否改变,没有告诉我们数据库的那条数据进行了改变或者是删除,添加,并不能解决大多数需求。当初我遇到这样的问题我也很痛苦,无论怎么早资料都没找到自己想要的,而网上大多数资料只是告诉你怎么监控数据库,但没有告诉你怎么获取具体的数据改变。往往成功是逆境里逼出来的,我去查找英文API,发现ContactsContract.RawContacts类中VERSION字段的说明,原文如下:Version number that is updated whenever this row or its related data changes. This field can be used for optimistic locking of a raw contact.中文大概意思就是,只要是联系人相关属性只要进行修改了都会自加。有了这个说明,我自己对android虚拟机上的联系人进行测试,然后把sqlit数据库导出进行查看,发现VERSION确实发生了改变。有了这个依据,便能很好的解决监听联系人数据变化了。
         我的设计思路是这样,当用户第一次启动程序,程序就遍历RawContacts,将所有_id和VERSION组合成字符串,然后用SharedPreferences存入。这样再监听数据库,当数据库有改变时,数据进行对比,就知道哪些数据进行了修改,如果SharedPreferences数据不存在说明有增加,如果SharedPreferences数据大于原有数据库的数据说明有增加。

    首先我先放上一段JAVA的demo展现思路。android代码稍后放上,如有疑问或者有什么不对,请大家指教。

    public class ContactJianTing
    {
    public static void main(String args[])
    {
    init();
    String str = "1-2";
    String a[] =str.split("-");
    for (String string : a)
    {
    System.out.println(string);
    }
    }
    private static void init()
    {
    HashMap<String, String> a = new HashMap<String, String>();
    HashMap<String, String> b = new HashMap<String, String>();
    for (int key = 1; key <= 1000; key++)
    {
    a.put(String.valueOf(key), String.valueOf(key));
    b.put(String.valueOf(key), String.valueOf(key+1));
    }
    Set<String> aSet = a.keySet();
    for (String string : aSet)
    {
    System.out.println(string);
    }
    long start = System.currentTimeMillis();
    for(int i = 1;i<=1000;i++)
    {
    System.out.println("号码 "+i);
    if(!a.get(String.valueOf(i)).equals(b.get(String.valueOf(i))))
    {
    System.out.println("数据不同");
    }
    System.out.println("-----------");
    }
    long end = System.currentTimeMillis();
    long sum = end - start;
    System.out.println("总共耗时"+sum);
    }
    }

    在没有连接数据库的情况下,使用HashMap,1000条数据耗时40毫秒左右。对于用户而言,拥有1000个联系人的手机毕竟少之又少。
  • 相关阅读:
    [转]WIBKIT技术资料
    WebKit学习要点
    提高IOS开发效率的常用网站、开源类库及工具
    【浏览器那些基础】Android平台有那些CPU类型
    深刻的理解
    Spring Boot 最流行的 16 条实践解读,值得收藏!
    MyBatis动态SQL(认真看看, 以后写SQL就爽多了)
    为什么很多 SpringBoot 开发者放弃了 Tomcat,选择了 Undertow?
    朋友,别告诉我你懂分布式事务!
    分布式锁用 Redis 还是 Zookeeper?
  • 原文地址:https://www.cnblogs.com/xyzlmn/p/3168107.html
Copyright © 2011-2022 走看看