Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android之——ContentResolver查詢的三種方式

Android之——ContentResolver查詢的三種方式

編輯:關於Android編程

 

今天做到一個小項目,查詢手機中短信的信息,當然得去系統暴露出來的數據庫中去查詢了,後來發現有三種方式可以選擇,下面一一寫出來。

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。

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved