歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android教程:Content Provider 中 UriMatcher的用法

Android教程:Content Provider 中 UriMatcher的用法

日期:2017/3/1 10:37:55   编辑:Linux編程

ContentProvider是Android四大組件之一,網上也有不少關於它的文章,基本用法都可以查到,但關於UriMatcher在其中的作用,文章中都有例子,但我覺得還沒有說清楚。

先說為什麼用UriMatcher。

ContentProvider向外界提供了一個標准的,也是唯一的用於查詢的接口:

[java]
  1. public final Cursor query(Uri uri, String[] projection,
  2. String selection, String[] selectionArgs, String sortOrder);

其中uri用於指定哪一個數據源,當一個數據源含有多個內容(比如多個表),就需要用不同的Uri進行區分,例如: [java]
  1. public static final Uri CONTENT_URI_A = Uri.parse("content://" + AUTHORITY + "/" + TABLE_A);
  2. public static final Uri CONTENT_URI_B = Uri.parse("content://" + AUTHORITY + "/" + TABLE_B);
這時候使用UriMatcher就可以幫助我們方便的過濾到TableA還是TableB, 然後進行下一步查詢, 如果不用UriMatcher也可以,我們就需要手動過濾字符串,用起來有點麻煩,可維護性也不好。

再說怎麼用UriMatcher, 定義如下:

[java]
  1. // Set up our URL matchers to help us determine what an
  2. // incoming URI parameter is.
  3. private static final UriMatcher URI_MATCHER;
  4. static {
  5. URI_MATCHER = new UriMatcher(UriMatcher.NO_MATCH);
  6. URI_MATCHER.addURI(AUTHORITY, TABLE_A, TABLE_A_MSG);
  7. URI_MATCHER.addURI(AUTHORITY, TABLE_B, TABLE_B_MSG);
  8. }

在查詢中使用UriMatcher:

[java]
  1. @Override
  2. public Cursor query(Uri uri, String[] projection, String selection,
  3. String[] selectionArgs, String sortOrder) {
  4. String table = null;
  5. switch (URI_MATCHER.match(uri)) {
  6. case ALL_MESSAGES:
  7. break;
  8. case OXFORD_MSG:
  9. table = TABLE_A;
  10. break;
  11. case CHENYU_MSG:
  12. table = TABLE_B;
  13. break;
  14. default:
  15. break;
  16. }
  17. Cursor resultCursor = mDB.query(table, projection, selection, selectionArgs, null, null, sortOrder);
  18. return resultCursor;
  19. }
總之,UriMatcher本質上是一個文本過濾器,用在contentProvider中幫助我們過濾,分辨出查詢者想要查詢哪個數據表。
Copyright © Linux教程網 All Rights Reserved