完美解决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个联系人的手机毕竟少之又少。




     本文转自xyz_lmn51CTO博客,原文链接:http://blog.51cto.com/xyzlmn/1230804 ,如需转载请自行联系原作者

相关文章
|
21天前
|
消息中间件 网络协议 Java
Android 开发中实现数据传递:广播和Handler
Android 开发中实现数据传递:广播和Handler
17 1
|
4天前
|
JSON Android开发 数据格式
android与Web服务器交互时的cookie使用-兼谈大众点评数据获得(原创)
android与Web服务器交互时的cookie使用-兼谈大众点评数据获得(原创)
13 2
|
6天前
|
Java Linux API
统计android设备的网络数据使用量
统计android设备的网络数据使用量
14 0
|
4天前
|
Android开发 数据库管理
Android如何在Activity和Service之间传递数据
Android如何在Activity和Service之间传递数据
10 3
|
4天前
|
XML JSON API
转Android上基于JSON的数据交互应用
转Android上基于JSON的数据交互应用
|
6天前
|
Android开发
Android获取横竖屏状态及监听
Android获取横竖屏状态及监听
10 0
|
7天前
|
Android开发
Android监听蓝牙广播
Android监听蓝牙广播
10 1
|
7天前
|
Android开发
Android 对鼠标事件的监听实现
Android 对鼠标事件的监听实现
12 1
|
28天前
|
Android开发 开发者
Android网络和数据交互: 请解释Android中的AsyncTask的作用。
Android&#39;s AsyncTask simplifies asynchronous tasks for brief background work, bridging UI and worker threads. It involves execute() for starting tasks, doInBackground() for background execution, publishProgress() for progress updates, and onPostExecute() for returning results to the main thread.
12 0
|
28天前
|
网络协议 安全 API
Android网络和数据交互: 什么是HTTP和HTTPS?在Android中如何进行网络请求?
HTTP和HTTPS是网络数据传输协议,HTTP基于TCP/IP,简单快速,HTTPS则是加密的HTTP,确保数据安全。在Android中,过去常用HttpURLConnection和HttpClient,但HttpClient自Android 6.0起被移除。现在推荐使用支持TLS、流式上传下载、超时配置等特性的HttpsURLConnection进行网络请求。
14 0