Android之——ContentResolver查询的三种方式
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47785491
今天做到一个小项目。查询手机中短信的信息,当然得去系统暴露出来的数据库中去查询了,后来发现有三种方式能够选择,以下一一写出来。
1、方式一
第一种方式,採用 getContentResolver().query()方法在主线程中查询数据。这样的查询方式是不是异步查询的,直接在UI线程中查询数据,代码例如以下:
Cursor cursor1 = getContentResolver().query(Sms.CONVESATION_URI, CONVERSATION_PROJECTION,null, null," sms.date desc");
while (cursor1.moveToNext()) {
Log.i("cursor1", String.valueOf(cursor1.getInt(0)));
Log.i("cursor1", cursor1.getString(1));
Log.i("cursor1", cursor1.getString(2));
}
cursor1.close();
2、方式二
另外一种查询方式。这样的查询相同是在UI线程中查询数据。只是这样的方式得到的Cursor不用手动去关闭,是Activity自己主动会去关闭的,cursor由activity去管理,代码例如以下:
Cursor cursor2 = managedQuery(Sms.CONVESATION_URI, CONVERSATION_PROJECTION, null, null, "sms.date desc");
while (cursor2.moveToNext()) {
Log.i("cursor2", String.valueOf(cursor2.getInt(0)));
Log.i("cursor2", cursor2.getString(1));
Log.i("cursor2", cursor2.getString(2));
}
3、方式三
第三种查询方式,这样的方式是利用Android提供的异步查询框架AsyncQueryHandler,/是一种异步查询方式,当单查询完成后。会调用onQueryComplete(token, cookie, cursor)通知查询完成,而且传回cursor。
代码例如以下:
private void startQuery() {
Uri uri = Sms.CONVESATION_URI;
mQueryHandler.startQuery(0, null, uri, CONVERSATION_PROJECTION, null, null, "sms.date desc");
}
// 写一个异步查询类
private final class QueryHandler extends AsyncQueryHandler {
public QueryHandler(ContentResolver cr) {
super(cr);
} @Override
protected void onQueryComplete(int token, Object cookie, Cursor cursor) {
super.onQueryComplete(token, cookie, cursor);
// 更新mAdapter的Cursor
mAdapter.changeCursor(cursor);
}
}
Android开发中性能优化始终要谨记在心。所以假设数据量略微大点都要使用异步查询。尽量避免在UI线程中做耗时操作,而查询而言,利用Android提供好的异步查询框架是最适合的了。事实上AsyncQueryHandler也是封装了Handler来实现的。另一点,一般在查询本地的应用的数据的时候要去採用CursorAdapter。
Android之——ContentResolver查询的三种方式的更多相关文章
- android中解析文件的三种方式
android中解析文件的三种方式 好久没有动手写点东西了,最近在研究android的相关技术,现在就android中解析文件的三种方式做以下总结.其主要有:SAX(Simple API fo ...
- Android中关闭应用的三种方式
当应用不再使用的时候,通常需要关闭应用,我们可以使用三种方式关闭android应用: 第一种方式:首先获取当前进程的id,然后杀死该进程(推荐) android.os.Process.killProc ...
- Android 接入 OpenCV库的三种方式
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效——由一系列 C 函数和少 ...
- 界面跳转+Android Studio Button事件的三种方式
今天学习界面跳转 java类总是不能新建成功 看了网上教程 (20条消息) 关于android studio无法创建类或者接口问题的解决方法_qq_39916160的博客-CSDN博客 可以新建了 但 ...
- Android实现全屏的三种方式
一.通过代码 requestWindowFeature(Window.FEATURE_NO_TITLE);// 隐藏标题栏 getWindow().setFlags(WindowManager.Lay ...
- Android自动轮播的三种方式
方法一:在runable里判断,不是最后条目的时候++,是的话=0,获取当前条目,给viewpager设置,然后在runable里递归post,在外面也post这个run // 自动轮播条显示 if ...
- Spring之jdbcTemplate:查询的三种方式(单个值、单个对象、对象集合)
JdbcTemplateDemo2.java package helloworld.jdbcTemplate; import org.springframework.jdbc.core.JdbcTem ...
- Mybatis的select查询的三种方式
1.首先建立一个测试的dao public interface IStudentDao { // 根据姓名查询 List<Student> selectStudentsByName(Str ...
- 【Android学习】数据传递三种方式
1.Application 注意在清单文件中的Application节点下注册android:name属性, 继承Application类,重写onCreate方法, 使用数据时,实例化自定义类时需要 ...
随机推荐
- C指针详解
前言:复杂类型说明 要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其 ...
- ubuntu下使用AutoKey实现ARK的自动跑/攻击/自动配种
脚本1: if not store.has_key("ark_run"): store.set_value("ark_run", 1) keyboard.pre ...
- CF984 C. Finite or not?【数论/GCD】
[链接]:CF [题意]:n组样例,对于每组样例,给你三个数p q b,问你p/q在b进制下是不是一个有限小数,是的话输出Finite,否则输出Infinite. [分析]:b的过程是对q约分,那么只 ...
- MapReduce 编程模板
1.MapReduce 编程模型的5个步骤: 1)迭代,将输入数据解析成 key/value 对: 2)将解析的 key/value经过Map处理映射成另一组key/value对: 3)根据key进行 ...
- luogu P1038借教室【Noip提高组2012】
这道题我读完题目的第一感觉是: 这不就是个线段树??用线段树维护区间最小值,检查是否满足订单要求即可判断. 对于修改操作直接在区间上进行. 据说会卡一卡线段树,但是貌似写一个懒标记,连zkw线段树都不 ...
- bzoj3942
有一个S串和一个T串,长度均小于1,000,000,设当前串为U串,然后从前往后枚举S串一个字符一个字符往U串里添加,若U串后缀为T,则去掉这个后缀继续流程.将s中的每一个字符压入栈暴力将s中的字符和 ...
- Xamarin XAML语言教程ContentView视图作为自定义视图的父类
Xamarin XAML语言教程ContentView视图作为自定义视图的父类 自定义视图的父类:ContentView视图可以作为自定义视图的父类. [示例14-2]以下将自定义一个颜色视图.具体的 ...
- 关于两数的最大公约数gcd
深根半夜里研究C++的语法,在弄到关于函数的定义 这一部分时突然想写个试试,就拿比较熟悉的gcd来好了. 活这么久gcd一直是用辗转相除法(或者说欧几里得算法)得出的,根据<算法导论>第三 ...
- JDBC操作数据库的基本流程
所有的JDBC应用程序都具有下面的基本流程: 1.加载数据库驱动并建立到数据库的连接. 2.执行SQL语句. 3.处理结果. 4.从数据库断开连接释放资源. 下面我们就来仔细看一看每一个步骤: 其实按 ...
- [BZOJ 2743] 采花
Link:https://www.lydsy.com/JudgeOnline/problem.php?id=2743 Algorithm: 此题询问区间内出现次数超过1个的数字 明显在线做无从下手,无 ...