Android利用ContentResolver查询的三种方式

转载 2013年12月02日 11:30:51

第一种方式,采用 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查询的三种方式

今天做到一个小项目,查询手机中短信的信息,当然得去系统暴露出来的数据库中去查询了,后来发现有三种方式可以选择,下面一一写出来。          第一种方式,采用 getContentResol...
  • NiXingFuJiuHao
  • NiXingFuJiuHao
  • 2013年11月18日 09:20
  • 503

Android之——ContentResolver查询的三种方式

今天做到一个小项目,查询手机中短信的信息,当让得去系统暴露出来的数据库中去查询了,后来发现有三种方式可以选择,下面一一写出来。 1、方式一  第一种方式,采用 getContentResolver()...
  • l1028386804
  • l1028386804
  • 2015年08月19日 19:27
  • 3349

ContentResolver.query方法的使用

个人搞了个博客App,平时上个厕所,睡觉前等随便看两篇文章,总能有些收获,希望大家支持!http://blog.csdn.net/supluo/article/details/43489475 ...
  • super_luo
  • super_luo
  • 2015年02月26日 16:37
  • 3507

ContentResolver获取图片与获取视频

1.ContentResolver是获取其他应用程序共享自身数据库某些字段的的对象。 这些共享的数据,由被获取的数据的应用程序通过ContentProvider主动对外暴露出来的。 2.获取Cont...
  • qq_18402085
  • qq_18402085
  • 2015年07月19日 09:59
  • 500

hibernate的三种查询方式

Hibernate的查询方式 hibernate的查询方式常见的主要分为三种: HQL, QBC(命名查询), 以及使用原生SQL查询(SqlQuery) 一、HQL查询 • HQL(Hibe...
  • u010963948
  • u010963948
  • 2013年11月19日 09:20
  • 14077

Android 使用ContentProvider ContentResolver 实现增删改查

1.ContentProvider package com.hh.beauter.contentprovider; import android.content.ContentProvider; ...
  • a525942
  • a525942
  • 2017年01月23日 15:37
  • 320

ContentResolver().query的分组查询

query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder); 方法...
  • yujinzhao_
  • yujinzhao_
  • 2015年11月30日 10:17
  • 568

Android ContentResolver ContactsContract 获取手机联系人信息

获取手机联系人信息步骤: 1、获取 ContentResolver ContentResolver resolver = getContentResolver(); 2、resolver.que...
  • qq_33425116
  • qq_33425116
  • 2016年09月11日 17:59
  • 602

ContentResolver查询系统音乐文件

//下面实现的是内容提供者查询的系统的音乐文件我们通过适配器展示在列表上面 获得音乐文件的名称 歌者 路径 import java.util.ArrayList; import java.u...
  • Mannver
  • Mannver
  • 2016年04月14日 19:35
  • 486

Android:ContentProvider的基本方法以及ContentResolver的对Provider的简单增删改查

ContentProvider使我们Android四大组件之一,ContentProvider可以实现在应用程序之间共享数据. 下面是本人自己写的一个简单dome 当然也可以参考详细的博客,点击这里...
  • James_lang
  • James_lang
  • 2017年02月06日 23:38
  • 442
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android利用ContentResolver查询的三种方式
举报原因:
原因补充:

(最多只允许输入30个字)