android 使用SimpleCursorAdapter将SQLite数据显示到ListView

我们知道,使用ListView的时候需要一个数据源,可以是本地数据,可以是网络数据。本篇博文使用SQLite为ListView提供数据源。

一、首先我们需要创建一个数据库表格。    a、建立一个类 DBHelper 继承 SQLiteOpenHelper .
public class DBHelper extends SQLiteOpenHelper {    public DBHelper(Context context) {        super(context, "test2.db", null, 1);        // TODO Auto-generated constructor stub    }    @Override    public void onCreate(SQLiteDatabase db) {        // TODO Auto-generated method stub        String sql = "create table class(_id integer primary key autoincrement,name varchar(64),number varchar(64))";         //要使用游标适配器,SQLite表格必须包含一栏“_id”        db.execSQL(sql);    }    @Override    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {        // TODO Auto-generated method stub    }}

关于SQLite的使用请访问我的另外一篇博文http://blog.csdn.net/q296264785/article/details/53155739

用单元测试的方法给数据库添加一些数据,方便看到效果。
public void add() {        DBHelper dbHelper = new DBHelper(getContext());        SQLiteDatabase database = dbHelper.getReadableDatabase();        ContentValues values = new ContentValues();        values.put("name", "张利利");        values.put("number", "12345");        database.insert("class", null, values);        values.put("name", "李提莫");        values.put("number", "43455");        database.insert("class", null, values);        values.put("name", "王石说");        values.put("number", "42345");        database.insert("class", null, values);        values.put("name", "赵六壳");        values.put("number", "14215");        database.insert("class", null, values);        values.put("name", "郭撒大");        values.put("number", "45234");        database.insert("class", null, values);        values.put("name", "刘䮻明");        values.put("number", "23445");        database.insert("class", null, values);    }
    c、在XML文件中编辑一个布局界面,下面是效果图:



XML布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical" >    <LinearLayout        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:background="#cccccc"        android:paddingBottom="10sp" >        <TextView            android:id="@+id/textView1"            android:layout_width="0sp"            android:layout_height="wrap_content"            android:layout_weight="1"            android:gravity="center_horizontal"            android:paddingTop="10dp"            android:text="编号"            android:textColor="#2828ff"            android:textSize="20sp" />        <TextView            android:id="@+id/textView2"            android:layout_width="0sp"            android:layout_height="wrap_content"            android:layout_weight="1"            android:gravity="center_horizontal"            android:paddingTop="10dp"            android:text="姓名"            android:textColor="#2828ff"            android:textSize="20sp" />        <TextView            android:id="@+id/textView3"            android:layout_width="0sp"            android:layout_height="wrap_content"            android:layout_weight="1"            android:gravity="center_horizontal"            android:paddingTop="10dp"            android:text="工号"            android:textColor="#2828ff"            android:textSize="20sp" />    LinearLayout>    <ListView        android:id="@+id/listView1"        android:layout_width="match_parent"        android:layout_height="wrap_content" >    ListView>LinearLayout>
    d、在Activity中创建一个SimpleCursorAdapter,并且设置给ListView。
import android.app.Activity;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.os.Bundle;import android.view.Menu;import android.widget.ListView;import android.widget.SimpleCursorAdapter;public class MainActivity extends Activity {    private DBHelper dbHelper;    private SQLiteDatabase database;    private SimpleCursorAdapter adapter;// 简单的游标适配器    private ListView listView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        listView = (ListView) findViewById(R.id.listView1);        dbHelper = new DBHelper(this);        database = dbHelper.getReadableDatabase();        Cursor c = database.query("class", null, null, null, null, null, null);        String[] from = { "_id", "name", "number" };        int[] to = { R.id.textView1, R.id.textView2, R.id.textView3 };        adapter = new SimpleCursorAdapter(this, R.layout.activity_main, c,                from, to);//改方法在搞版本已经过时,因为如果读取数据库时间过长是系统会报错,新的方法将数据库读取操作放在另外的线程中。        listView.setAdapter(adapter);    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.main, menu);        return true;    }}

文件目录:

———————————————-分割线———————————————–
源代码:

布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical" >    <LinearLayout        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:background="#cccccc"        android:paddingBottom="10sp" >        <TextView            android:id="@+id/textView1"            android:layout_width="0sp"            android:layout_height="wrap_content"            android:layout_weight="1"            android:gravity="center_horizontal"            android:paddingTop="10dp"            android:text="编号"            android:textColor="#2828ff"            android:textSize="20sp" />        <TextView            android:id="@+id/textView2"            android:layout_width="0sp"            android:layout_height="wrap_content"            android:layout_weight="1"            android:gravity="center_horizontal"            android:paddingTop="10dp"            android:text="姓名"            android:textColor="#2828ff"            android:textSize="20sp" />        <TextView            android:id="@+id/textView3"            android:layout_width="0sp"            android:layout_height="wrap_content"            android:layout_weight="1"            android:gravity="center_horizontal"            android:paddingTop="10dp"            android:text="工号"            android:textColor="#2828ff"            android:textSize="20sp" />    LinearLayout>    <ListView        android:id="@+id/listView1"        android:layout_width="match_parent"        android:layout_height="wrap_content" >    ListView>LinearLayout>

DBHelper 类:

import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteOpenHelper;public class DBHelper extends SQLiteOpenHelper {    public DBHelper(Context context) {        super(context, "test2.db", null, 1);        // TODO Auto-generated constructor stub    }    @Override    public void onCreate(SQLiteDatabase db) {        // TODO Auto-generated method stub        String sql = "create table class(_id integer primary key autoincrement,name varchar(64),number varchar(64))";        db.execSQL(sql);    }    @Override    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {        // TODO Auto-generated method stub    }}

MainActivity:

import android.app.Activity;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.os.Bundle;import android.view.Menu;import android.widget.ListView;import android.widget.SimpleCursorAdapter;public class MainActivity extends Activity {    private DBHelper dbHelper;    private SQLiteDatabase database;    private SimpleCursorAdapter adapter;// 简单的游标适配器    private ListView listView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        listView = (ListView) findViewById(R.id.listView1);        dbHelper = new DBHelper(this);        database = dbHelper.getReadableDatabase();        Cursor c = database.query("class", null, null, null, null, null, null);        String[] from = { "_id", "name", "number" };        int[] to = { R.id.textView1, R.id.textView2, R.id.textView3 };        adapter = new SimpleCursorAdapter(this, R.layout.activity_main, c,                from, to);//该方法在高的版本中已经过时,因为在如果读取数据库时间过长系统会报错,新的版本中将数据库读取操作放在另外的线程中。        listView.setAdapter(adapter);    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.main, menu);        return true;    }}

测试类test

import android.content.ContentValues;import android.database.sqlite.SQLiteDatabase;import android.test.AndroidTestCase;public class test extends AndroidTestCase {    public void create() {        DBHelper dbHelper = new DBHelper(getContext());        SQLiteDatabase database = dbHelper.getReadableDatabase();    }    public void add() {        DBHelper dbHelper = new DBHelper(getContext());        SQLiteDatabase database = dbHelper.getReadableDatabase();        ContentValues values = new ContentValues();        values.put("name", "张利利");        values.put("number", "12345");        database.insert("class", null, values);        values.put("name", "李提莫");        values.put("number", "43455");        database.insert("class", null, values);        values.put("name", "王石说");        values.put("number", "42345");        database.insert("class", null, values);        values.put("name", "赵六壳");        values.put("number", "14215");        database.insert("class", null, values);        values.put("name", "郭撒大");        values.put("number", "45234");        database.insert("class", null, values);        values.put("name", "刘䮻明");        values.put("number", "23445");        database.insert("class", null, values);    }}

更多相关文章

  1. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
  2. Android中SQLite开发详解(四)SQLiteOpenHelper 类和SQLiteDatabase
  3. android数据库——SQLiteDatabase的Helper类
  4. GreenDao3.0简单使用和升级
  5. Android:xUtils3 浅析(二)——数据库模块
  6. Android(安卓)Room 框架学习
  7. adb pull命令复制android数据库文件.db到电脑
  8. [置顶] android 内存泄露那些事情之游标、文件、网络连接、广播(
  9. Android(安卓)- 监视数据库的变化

随机推荐

  1. FFmpeg在Android上的移植优化步骤
  2. android与C++的选择
  3. 《Android取证实战:调查、分析与移动安全
  4. android 中Message、Handler、Message Qu
  5. Android线程模型解析(包括UI的更新)
  6. Android流媒体播放器
  7. android:gravity和android:layout_gravit
  8. Android(安卓)传感器
  9. Android(安卓)NDK开发使用以及so文件生成
  10. Google Android开发精华教程