从Android Contacts应用看CursorLoader 一Cursor篇

本文详细介绍了Android中的Cursor组件,包括其基本概念、重要方法及其在数据查询中的应用实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从Android Contacts应用看CursorLoader 一Cursor篇

android中从数据库中查出来的数据一般都存在cursor中即:Cursor mCursor = mSQLiteDatabase.query("select * form table", null),说白了就是一个数据集合,具体的说就是每行数据集合

关于 Cursor

在你理解和使用 Android Cursor 的时候你必须先知道关于 Cursor 的几件事情:

  • Cursor 是每行的集合。
  • 使用 moveToFirst() 定位第一行。
  • 你必须知道每一列的名称。
  • 你必须知道每一列的数据类型。
  • Cursor 是一个随机的数据源。
  • 所有的数据都是通过下标取得。

关于 Cursor 的重要方法

一般使用
ContentResolver resolver = mContext.getContentResolver();
Cursor cursor = resolver.query(CallLog.Calls.CONTENT_URI,
new String[]{"_id",CallLog.Calls.DATE,CallLog.Calls.DURATION},
"number=?", new String[]{number},"_id desc limit 1");

if (cursor != null) {
if(cursor.moveToFirst()) {
long smadddate = cursor.getLong(cursor.getColumnIndex(CallLog.Calls.DATE));
long smaddduration = cursor.getLong(cursor.getColumnIndex(CallLog.Calls.DURATION));
SimpleDateFormat sfd = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date date = new Date(Long.parseLong(cursor.getString(cursor.getColumnIndex(CallLog.Calls.DATE))));
}while (cursor.moveToNext()){
}
cursor.close();
}else{}

上面给出了  简单查询number相关的最近通讯记录
很明显,我们可以看出来Cursor是Android给我们的查询结果集

当cursor.moveToNext() 为假时将跳出循环,即 Cursor 数据循环完毕。

如果你喜欢用 for 循环而不想用While 循环可以使用Google 提供的几下方法:

  • isBeforeFirst() 
    返回游标是否指向之前第一行的位置
  • isAfterLast() 
    返回游标是否指向第最后一行的位置
  • isClosed() 
    如果返回 true 即表示该游戏标己关闭

有了以上的方法,可以如此取出数据

 

for (cursor.moveToFirst(); ! cursor.isAfterLast();cursor.moveToNext())
{
    
int  nameColumn  =  cur.getColumnIndex(People.NAME);
    
int  phoneColumn  =  cur.getColumnIndex(People.NUMBER);
    String name 
=  cur.getString(nameColumn);
    String phoneNumber 
=  cur.getString(phoneColumn);
}

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值