我们在用SQLite查数据的时候,经常会用到Cursor这个游标,我们希望能将游标指向的数据直接绑定到ListView中,这样就免去了将游标数据取出然后转换到SimpleAdapter中的麻烦。今天我们来演示下这个适配器如何使用。

思路:通过传统的方法执行查询操作,返回一个Cursor,将这个游标放入到SimpleCursorAapter的构造函数中即可,最后setAdapter

MainActivity.java

package com.kale.cursoradapter;

import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter; public class MainActivity extends Activity { DatabaseManager dbManager; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//得到一个数据层操作对象
dbManager = new DatabaseManager(this);
//因为在数据库建立的时候我们已经建立一个表了,所以这里就可以直接插入数据了
String insertSql = "insert into test_table (name,age) values('kale',20)";
//用循环的方式来插入20条数据
for (int i = 0; i < 20; i++) {
dbManager.executeSql(insertSql);
}
// 这个游标查询到的数据中必须有一个列名为_id否则会报错,所以写sql语句的时候必须要查到_id。显不显示这个id到无所谓
String sql = "select _id,name,age from test_table";
//得到一个Cursor,这个将要放入适配器中
Cursor cursor = dbManager.executeSql(sql, null);
// 最后一个参数flags是一个标识,标识当数据改变调用onContentChanged()的时候,是
// 否通知ContentProvider数据的改变,如果无需监听ContentProvider的改变,则可以传0。
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
R.layout.item, cursor, new String[] { "name", "age" },
new int[] { R.id.name, R.id.age }, 0); ListView listView = (ListView) findViewById(R.id.listView);
listView.setAdapter(adapter);
} }

注意:这里查询到的数据中必须有一列是_id,否则会报错。所以在建表的时候就应该建立这一列。

后面两个类基本就是直接从我之前的文章中copy过来的,方便以后使用。

数据库对象类——DatabaseManager

package com.kale.cursoradapter;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException; public class DatabaseManager{ DatabaseHelper mDbHelper = null;
//操作数据库的实例
static SQLiteDatabase mDb = null;
Context mContext = null; public DatabaseManager(Context context) {
mContext = context;
mDbHelper = DatabaseHelper.getInstance(mContext);
mDb= mDbHelper.getReadableDatabase();
} /**
* 建立表
* SQLite内部只支持NULL,INTEGER,REAL(浮点),TEXT(文本),BLOB(大二进制)5种数据类型
* 建立表成功了,返回true
*/
public boolean executeSql(String sql){
try {
mDb.execSQL(sql);
return true;
}
catch(SQLiteException e){
return false;
}
} public Cursor executeSql(String sql,String[]args){
try {
return mDb.rawQuery(sql, args);
}
catch(SQLiteException e){
e.printStackTrace();
}
return null;
} /**
* 关闭连接
*/
public void closeDBhelper() {
if (mDbHelper != null) {
mDbHelper.close();
}
} }

DatabaseHelper

package com.kale.cursoradapter;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper; public class DatabaseHelper extends SQLiteOpenHelper{ private static DatabaseHelper mInstance = null;
//数据库名字
public static final String DATABASE_NAME = "SQLite_db";
//版本号
private static final int DATABASE_VERSION = 1;
//建立默认表的语句,必须有_id这个列
private static final String CREAT_TABLE_TABLE_SQL = "create table test_table("
+ "_id INTEGER PRIMARY KEY AUTOINCREMENT," + "name TEXT,age INTEGER);";
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
} public DatabaseHelper(Context context, String name, int version) {
super(context, name, null, version);
} public static synchronized DatabaseHelper getInstance(Context context) {
if (mInstance == null) {
mInstance = new DatabaseHelper(context);
}
return mInstance;
} /*
* 初次使用时创建数据库表
*/
@Override
public void onCreate(SQLiteDatabase db) {
//通过sql语句建立默认表
db.execSQL(CREAT_TABLE_TABLE_SQL);
} @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
/**可以拿到当前数据库的版本信息 与之前数据库的版本信息 如果不同,那么就更新数据库**/ }
//删除数据库
public boolean deleteDatabase(Context context , String databaseName) {
return context.deleteDatabase(databaseName);
}
}

源码下载:http://download.csdn.net/detail/shark0017/8026895

SimpleCursorAdapter和ListView的结合使用的更多相关文章

  1. Android开发具体解释之ListView具体解释一

    列表ListView介绍和实例  1.ListView  -- ListActivity -- ListAdapter  2.ArrayAdapter结合ListView进行显示  3.SimpleA ...

  2. android-基础编程-ListView

    ListView主要包括view和数据源.其数据适配器列表分为三种,ArrayAdapter,SimpleAdapter和SimpleCursorAdapter. ListView的没有oom原因.经 ...

  3. Android-ContentProvider简单的增删改查

    注意:在ContentProvider里面写对数据库增删改查的时候,千万不能 db.close();  cursor.close(); 等操作,不然其他应用访问不到数据,也没有必要写isOpen(); ...

  4. Android SQLite(1)简单示例-增,删,改,查

    1.主要核心类,Sqlite编程要继承SQLiteOpenHelper import android.content.Context; import android.database.sqlite.S ...

  5. Andriod学习笔记2:“Your content must have a ListView whose id attribute is 'android.R.id.list'”问题的解决办法

    问题描述 activity_main.xml代码如下: <?xml version="1.0" encoding="utf-8"?> <Lin ...

  6. Android软件开发之ListView 详解【转】

    ListView的使用方法  ListView是Android软件开发中非常重要组件之一,基本上是个软件基本都会使用ListView ,今天我通过一个demo来教大家怎么样使用ListView组件 绘 ...

  7. 安卓 android ListView 数据填充

    在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示.抽空把对ListView的使用做了整理,并写了个小例子,如下图. 列表的显示需要三 ...

  8. Android Listview

    方法一: xml文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xml ...

  9. Android之listview && adapter

    今天我们讲的也是非常重要的一个控件listview-最常用也是最难的 一个ListView通常有两个职责. (1)将数据填充到布局. (2)处理用户的选择点击等操作. 第一点很好理解,ListView ...

随机推荐

  1. day39数据库之基本数据类型

    数据库之数据类型1.数据存储引擎 一个功能的核心部分,回到mysql        核心功能是存储数据  涉及到存储数据的代码 就称之为存储引擎        根据不同的需求 也有着不同的引擎分类 不 ...

  2. 删除已经提交到远程仓库的gitignore文件

    亲们支持我的新博客哦==>地址(以后更新会尽量在新博客更新,欢迎大家访问加入我的后宫w) ) gitignore里新添加了需要过滤的文件,但是之前已经提交到了远程分支 解决方法: # 1.为避免 ...

  3. 《算法导论》——重复元素的随机化快排Optimization For RandomizedQuickSort

    昨天讨论的随机化快排对有重复元素的数组会陷入无限循环.今天带来对其的优化,使其支持重复元素. 只需修改partition函数即可: int partition(int *numArray,int he ...

  4. upcast 做了什么操作

    把子类中仅仅继承而来的成员,赋值给父类. 但是,不会改变虚表!因为这个obj的类型没变. #include <stdio.h> using namespace std; class A{ ...

  5. Delphi中Chrome Chromium、Cef3学习笔记(一)

    原文   http://blog.csdn.net/xtfnpgy/article/details/46635225   官方下载地址:https://cefbuilds.com/ CEF简介: 嵌入 ...

  6. java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一

    对java的泛型特性的了解仅限于表面的浅浅一层,直到在学习设计模式时发现有不了解的用法,才想起详细的记录一下. 本文参考java 泛型详解.Java中的泛型方法. java泛型详解 1. 概述 泛型在 ...

  7. ansible自动化运维详细教程及playbook详解

    前言 当下有许多的运维自动化工具( 配置管理 ),例如:Ansible.SaltStack.Puppet.Fabric 等. Ansible 一种集成 IT 系统的配置管理.应用部署.执行特定任务的开 ...

  8. 利用python的requests发送http请求

    >>> from requests import put, get >>> put('http://localhost:5000/todo1', data={'da ...

  9. vue浏览器滚动加载更多

    created () { var that = this; window.addEventListener('scroll',this.scroll,true) console.log(this.$r ...

  10. 转:JMeter监控内存及CPU ——plugin插件监控被测系统资源方法

    JMeter监控内存及CPU ——plugin插件监控被测系统资源方法 jmeter中也可以监控服务器的CPU和内存使用情况,但是需要安装一些插件还需要在被监测服务器上开启服务. 1.需要的插件准备 ...