`
keeponmoving
  • 浏览: 111467 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android利用ContentResolver查询的三种方式

 
阅读更多

今天做到一个小项目,查询手机中短信的信息,当让得去系统暴露出来的数据库中去查询了,后来发现有三种方式可以选择,下面一一写出来。

 

 第一种方式,采用 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();

 第二种查询方式,这种查询同样是在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));
		}

第三种查询方式,这种方式是利用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访问者获取手机联系人信息

    利用ContentResolver内容访问者,获取手机联系人信息我做了两种不同的做法。第一种,直接获取所有手机联系人信息,展示在ListView中。第二种,通过Butten按钮跳转到系统的手机联系人界面,单个获取手机联系人信息,...

    android利用ContentResolver访问者获取手机短信信息

    本篇文章主要介绍了android利用ContentResolver访问者获取手机短信信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。

    Android中实现ContentResolver对系统中所有联系人的访问

    朝着实验要求和目的去想,要想访问系统中的联系人,可以利用 ContentResolver 类来访问,使用ContentResolver 类可以访问别的应用程序通过 ContentProvider 提供的数据,这里可以用 Android 系统提供的标准的 ...

    疯狂Android讲义源码

     15.1 利用Android的传感器 547  15.1.1 开发传感器应用 547  15.1.2 下载和安装SensorSimulator 549  15.1.3 利用SensorSimulator开发  传感器应用 551  15.2 Android的常用传感器 553  15.2.1 方向传感器...

    Google Android SDK开发范例大全(PDF高清完整版1)(4-1)

    Google Android SDK开发范例大全(完整版)共4个分卷 目录 第1章 了解.深入.动手做. 1.1 红透半边天的Android 1.2 本书目的及涵盖范例范围 1.3 如何阅读本书 1.4 使用本书范例 1.5 参考网站 第2章 Android初体验 2.1...

    Google Android SDK开发范例大全(PDF完整版4)(4-4)

    Google Android SDK开发范例大全(完整版)共4个分卷 目录 第1章 了解.深入.动手做. 1.1 红透半边天的Android 1.2 本书目的及涵盖范例范围 1.3 如何阅读本书 1.4 使用本书范例 1.5 参考网站 第2章 Android初体验 2.1...

    深入浅出Google Android 第9章

    深入浅出Google Android 第9章 第 9 章 用数据来说话-使用 SQLite,Content Provider与...9.3.2 使用 ContentResolver查询、更改数据 9.4 使用 Preferences存储应用程序数据 9.5 让 TinyPlayer播放本地音乐 9.6 小结

    Google Android SDK开发范例大全(PDF高清完整版3)(4-3)

    Google Android SDK开发范例大全(完整版)共4个分卷 目录 第1章 了解.深入.动手做. 1.1 红透半边天的Android 1.2 本书目的及涵盖范例范围 1.3 如何阅读本书 1.4 使用本书范例 1.5 参考网站 第2章 Android初体验 2.1...

    android 面试2

    避免ANR:Android应用程序通常运行在一个单独的线程里面,称谓主线程,所以在主线程里面少做一些耗时长的程序,而是利用子线程来操作一些繁琐的事情,用Handler来把子线程处理的消息返回给主线程 22、简要解释一下...

    Google Android SDK开发范例大全的目录

    5.9 搜索手机通讯录自动完成——使用ContentResolver-p82 5.10 取得联系人资料——Provider.Contact的使用 5.11 制作有图标的文件资源管理器——自定义Adapter对象 5.12 还原手机默认桌面——重写clearWallpaper方法...

    Google Android SDK开发范例大全(完整版附部分源码).pdf

    Google Android SDK开发范例大全(完整版) 包含部分书中源码 目录 第1章 了解.深入.动手做. 1.1 红透半边天的Android 1.2 本书目的及涵盖范例范围 1.3 如何阅读本书 1.4 使用本书范例 1.5 参考网站 第2章 ...

    疯狂Android讲义.part2

    15.1 利用Android的传感器 547 15.1.1 开发传感器应用 547 15.1.2 下载和安装SensorSimulator 549 15.1.3 利用SensorSimulator开发 传感器应用 551 15.2 Android的常用传感器 553 15.2.1 方向传感器Orientation 553 ...

    疯狂Android讲义.part1

    15.1 利用Android的传感器 547 15.1.1 开发传感器应用 547 15.1.2 下载和安装SensorSimulator 549 15.1.3 利用SensorSimulator开发 传感器应用 551 15.2 Android的常用传感器 553 15.2.1 方向传感器Orientation 553 ...

    带有日期分组的相册主页面

    利用contentResolver获取照片信息,有照片list和照片天数个数的list,用recycleview 显示,通过继承有头部的适配器就可以获得头部的日期分组。同时有list变成2D数组的方法,在根据某天某张图片显示出来。

    《深入理解Android》卷Ⅱ

    1.2.3 利用Eclipse调试system_process 1.3 本章小结 第2章 深入理解Java Binder和MessageQueue 2.1 概述 2.2 Java层中的Binder架构分析 2.2.1 Binder架构总览 2.2.2 初始化Java层Binder框架 2.2.3 ...

Global site tag (gtag.js) - Google Analytics