zoukankan      html  css  js  c++  java
  • SimpleCursorAdapter和ListView的结合使用

      我们在用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

  • 相关阅读:
    可视化开发_AppInventor2似乎被抛弃了
    PHP内核学习(一)SAPI
    代码整洁之道(一)理论篇
    Silence.js高效开发移动Web前端类库
    梦游前端,JavaScript兼容性
    20分钟入门正则表达式
    原生Javascript 省市区下拉列表插件
    Tortoise-SVN 出现“unable to connect to a repository at url no element found”解决办法
    PHP实现好友生日邮件提醒
    第一份工作
  • 原文地址:https://www.cnblogs.com/tianzhijiexian/p/4019645.html
Copyright © 2011-2022 走看看