Android contentProvider 学习心得(2)

使用UrI来读取数据

ContentProvider定义的URI是对于该ContentProvider是唯一的。Android中包含了的ContentProvider通过定义表示这些URI的字符串常量来实现此目的。
考虑到AndroidSDK照片那个的帮助器类定义了三个URI:
MediaStore.Image.Media.INTERAL_CONTEN_URI
MediaStore.Image.Media.EXTARNAL_CONTENT_URL
ContactsContrat.Contacts.CONTENT_URI
等效的文本URL字符串如下:
content://media/internal/images
content://media/external/images
content://com.android.contracts/contacts

给定这些URI,从联系人中获取单行联系人的代码如下
Uri peopleUri = ContactsCOntract.Contacts.CONTENT_URI;
Uri myPersonalUri = Uri.withAppendedPath(peoleUri, "23")

//Query for this record
//managedQuery is a method on Activity class
Cursor cur = managedQuery(myPersonUri,null,null,null);
在这里的例子中,代码使用根URI,添加制定的联系人ID,然后调用managedQuery的方法
作为对此URI的查询的一部分,可以指定排序顺序,要选择序列,要选择的列和where子句。

关于游标的使用

下面是关于Android游标中德一些知识:
游标是一个行集合
读取数据之前,需要使用moveToFirst(),因为游标放在第一行之前
需要知道列名
需要知道列的类型
所有字段访问方法都是基于列编号,所以必须首先将列名称转换为列编号
游标可以素以移动
由于可以随意移动,所以可以向他获取行计数
if(cur.moveToFirst() == false)
{
	//no rows empty
	return;
}

//the cursor is already point to the first now
//let's access a few colums
int nameColumnIndex = cur.getColumnIndex(Contacts.DISPLAY_NAME_PRIMARY);
string name = cur.getString(nameColumnIndex);

//let's now see how we can loop through a cursor

while(cur.moveToFirst())
{
	//cursor moved successfully
	//accesfield
}
上述代码 在第一行的时候已经将游标放在了第一行之前。为了将游标放在第一行之前,我们对游标进行了moveToFirst()方法。如果游标为空,此方法为false。然后使用moveToNext()方法反复导航该游标。
为了帮助理解游标的位置,Android提供了一下的方法。
isBeforeFirst()
isAfterLast()
isClosed()

使用where子句

ContentProvider提供了两种方法来使用where子句
通过URI
通过string子句与一组可替换的字符串数组参数集合

我们通过URI来传递Where子句
Activity someActivtiy;
//..initialize the Activity
string noteUri = "content://com.google.provider.NotePad/note/23";
Cursor managedCursor = someActivtiy.managedQuery(noteUri,
							projection, // which colums to return
							null, //where clause
							null); // Order-By clause;

我们将managedQuery方法的where子句参数保留为null。应为在本例中,我们假设笔记提供的程序非常的智能,能够判断我们想要的图书id,此id嵌入在URI本身。从某种意义上来说,我们将URI用做了传递where子句的工具。

使用显式的where子句
我们可以看到Activity中使用managedQuery方法。下面是该方法的prototype

public final Cursor managedQuery(Uri uri,
							String[], projection
							String selection,
							String[] selectionArgs,
							String sortOrder)

请注意名为selection的参数,他的类型为String。这个选择字符串表示一个过滤器(在本质上是一个where子句),他以SQL WHERE子句(不包含WHERE本身)的格式申明要返回的行。传递null将返回的给定URI的所有行。在选择字符串中可以包含?,它将被替换为selectionArg中的值,并按在选择列表中给出的列顺序显示。这些值将作为String绑定
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值