2011.09.26——— android sample之Notepad(notepadprovider)

1、SQLiteQueryBuilder
SQLiteQueryBuilder 是一个构造SQL查询语句的辅助类。

首先,
qb.setTables(DIARY_TABLE_NAME)


然后
qb.setProjectionMap(Map)
这个事设置表明的映射
例如
Map.put(Notes._ID, Notes._ID);Map.put(Notes.Name, Notes.Title + " as " +Notes.ID);

接着
qb.appendWhere();
选着性的 主要用于查询单个记录
qb.appendWhere(Notes._ID + "=" + uri.getPathSegments().get(1));

最后
SQLiteDatabase db = mOpenHelper.getReadableDatabase()//得到一个可读的SQLiteDatabase 实例。Cursor c = qb.query(db, projection, selection, selectionArgs, null,null, orderBy)

这个查询类似于一个标准的SQL查询,但是这个查询是SQLiteQueryBuilder 来发起的,而不是SQLiteDatabase 直接发起的,所以在参数方面略有不同。这个函数为 query(SQLiteDatabase db, String[] projectionIn, String selection, String[] selectionArgs, String groupBy, String having, String sortOrder, String limit)下边将各个参数介绍一下。

第一个参数为要查询的数据库实例。

第二个参数是一个字符串数组,里边的每一项代表了需要返回的列名。

第三个参数相当于SQL语句中的where部分。

第四个参数是一个字符串数组,里边的每一项依次替代在第三个参数中出现的问号(?)。

第五个参数相当于SQL语句当中的groupby部分。

第六个参数相当于SQL语句当中的having部分。

第七个参数描述是怎么进行排序。

第八个参数相当于SQL当中的limit部分,控制返回的数据的个数。

2、cursor.setNotificationUri
参考:http://blog.chinaunix.net/space.php?uid=20665441&do=blog&id=1742298

setNotificationUri通常用在ContentProvider.query(),c.setNotificationUri(getContext().getContentResolver(), uri); 是用在cursor被建立后,如果內容被改变时,cursor会自已知道已经不是最新状态而自行requery.

源码里面也是建一个SelfContentObserver,调用registerContentObserver()方法来实现的

3、getType
参考:http://hi.baidu.com/ljlkings/blog/item/b5e752c9410103ee53664f4a.html

返回目前操作的数据的MIME类型

也就是说你想通过mime类型类调用组件的时候 就需要实现getType()
<intent-filter>                <action android:name="android.intent.action.VIEW" />                <action android:name="android.intent.action.EDIT" />                <action android:name="android.intent.action.PICK" />                <category android:name="android.intent.category.DEFAULT" />                <data android:mimeType="vnd.android.cursor.dir/vnd.google.note" /> </intent-filter>


@Override    public String getType(Uri uri) {        switch (sUriMatcher.match(uri)) {        case NOTES:        case LIVE_FOLDER_NOTES:            return Notes.CONTENT_TYPE;        case NOTE_ID:            return Notes.CONTENT_ITEM_TYPE;        default:            throw new IllegalArgumentException("Unknown URI " + uri);        }    }


一般来说:

如果操作的数据属于集合类型,那么MIME类型字符串应该以vnd.android.cursor.dir/开头,
例如:要得到所有person记录的Uri为content://cn.itcast.provider.personprovider/person,
那么返回的MIME类型字符串应该为:“vnd.android.cursor.dir/person”。
如果要操作的数据属于非集合类型数据,那么MIME类型字符串应该以vnd.android.cursor.item/开头,
例如:得到id为10的person记录,Uri为content://cn.itcast.provider.personprovider/person/10,
那么返回的MIME类型字符串应该为:“vnd.android.cursor.item/person”。

更多相关文章

  1. mybatisplus的坑 insert标签insert into select无参数问题的解决
  2. Python技巧匿名函数、回调函数和高阶函数
  3. python list.sort()根据多个关键字排序的方法实现
  4. 2011.09.26——— android sample之Notepad(notepadprovider)
  5. Android(安卓)JNI char* 和jstring类型相互转换函数。
  6. 【Arcgis android】 离线编辑实现及一些代码段
  7. 关于设置线性布局及其他布局的宽高
  8. android中四个典型动画设置
  9. Android(安卓)Resource介绍和使用(二)

随机推荐

  1. android调用js
  2. Android实现定时刷新
  3. 【Android】Android SurfaceFlinger之Buf
  4. Android7关闭selinux(设置为Permissive模
  5. RN集成原生Android应用
  6. Android webkit 事件传递流程
  7. Android中用到了哪些设计模式?
  8. Android 基础知识复习
  9. Android使用腾讯X5内核替换原生webview
  10. android那点事