5分钟轻松解决Android数据库访问,Cursor类的基础使用

来源:互联网 发布:恒大淘宝核心管理层 编辑:程序博客网 时间:2024/05/16 05:04

相比于MySql等数据库,SqLite有它自己的工具Cursor,一次获取一行数据(在数据库中,一行包含了一个主键约束的索引的全部内容)。

Cursor就像高中物理课上的游标卡尺

使用游标来读数据库一般分两步:(就像在游标卡尺上读数)

1.横向的获取列名所对应的位置(储存在Cursor中的位置),getColumnIndex方法

2.通过得到的位置,getString(index) or getInt(index)

3.也可以做循环输出
while (cursor.moveNex()t){
//move方法 返回一个布尔值,当到达最后一行时,返回false
}

下面结合的例子Cursor与RecyclerLayout的结合使用,大部分代码无难度,主要是对RecyclerView的适配器不熟悉,造成加载数据的部分花了很多coding时间。

首先是cursor中数据的读取

 protected void bind(int position){           if(!cursor.moveToPosition(position))               return;               //若选中位置没有数据,返回,其实还是一个安全保护,防止程序意外崩溃               int index;               index=cursor.getColumnIndex(WaitlistContract.WaitlistEntry.COLUMN_GUEST_NAME);               String guestName=cursor.getString(index);               index=cursor.getColumnIndex(WaitlistContract.WaitlistEntry.COLUMN_TIMESTAMP);               String time=cursor.getString(index);               nameTextView.setText(time);               partySizeTextView.setText(guestName);        }

其中妙处在于,RecyclerView适配器的position刚好和cursor中的moveToPosition完美的结合起来了,不得不赞叹Google工程师的智慧。

 @Override    public GuestViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {       //获取填充器        LayoutInflater inflater = LayoutInflater.from(mContext);        View view = inflater.inflate(R.layout.guest_list_item, parent, false);        return new GuestViewHolder(view);    }    @Override    public void onBindViewHolder(GuestViewHolder holder, int position) {    //holder是ViewHolder实例          holder.bind(position);    }    @Override    public int getItemCount() {        return cursor.getCount();    }
原创粉丝点击