在許多時候需要將數據庫表中的數據顯示在ListView、Gallery等組件中。雖然可以直接使用Adapter對象處理,但工作量很大。爲此,Android SDK提供了一個專用於數據綁定的Adapter類:SimpleCursorAdapter。
SimpleCursorAdapter與SimpleAdapter用法相近。只是將List對象換成了Cursor對象。而且SimpleCursorAdapter類構造方法的第四個參數from表示Cursor對象中的字段,而SimpleAdapter類構造方法的第四個參數from表示Map對象中的key。除此之外,這兩個Adapter類在使用方法完全相同。
下面是SimpleCursorAdapter類構造方法定義。
public SimpleCursorAdapter(Context context,int layout,Cursor c,String[] from,int[] to);
下例中通過SimpleCursorAdapter類將數據庫表綁定在ListView上,也就是說,該ListView會顯示數據表的全部記錄。在綁定數據前,需要先編寫一個SQLiteOpenHelper類的子類,用於操作數據庫,代碼如下:
package com.li;
import java.util.Random;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DBService extends SQLiteOpenHelper {
private final static int DATABASE_VERSION = 1;
private final static String DATABASE_NAME = "test.db";
public DBService(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
//創建表
String sql = "CREATE TABLE [t_test](" + "[_id]AUTOINC,"
+ "[name]VARCHAR2(20) NOT NULL CONFLICT FAIL,"
+ "CONSTRAINT[sqlite_autoindex_te_test_1]PRIMARY KEY([_id]))";
db.execSQL(sql);
//向test數據庫中插入20條記錄
Random random = new Random();
for ( int i = 0;i<20;i++)
{
String s = "";
for(int j=0;j<10;j++)
{
char c = (char)(97+random.nextInt(26));
s+=c;
}
db.execSQL("insert into t_test(name)values(?)",new Object[]{s});
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
//執行查詢語句
public Cursor query(String sql,String[] args)
{
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(sql, args);
return cursor;
}
}
本例不需要對test.db進行升級,因此,只有在DBService類中的oncreate()方法中有創建數據庫表的代碼。DBService類創建了一個test.db數據庫文件,並在該文件中創建了t_test表。在該表中包含兩個字段_id和name。其中_id是自增字段,並且是主索引。
下面編寫MapsDemo類。MapsDemo類是ListActivity的子類。在該類中的oncreate()方法中創建了DBService對象,然後通過DBService類的query方法查詢出t_test表中的所有記錄,並返回Cursor對象。MapsDemo類的代碼如下:
package com.li;
import android.app.ListActivity;
import android.database.Cursor;
import android.os.Bundle;
import android.widget.SimpleCursorAdapter;
public class MapsDemo extends ListActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
DBService dbService = new DBService(this);
//查詢數據
Cursor cursor = dbService.query("select * from t_test", null);
//綁定數據
SimpleCursorAdapter simpleCursorAdapter = new SimpleCursorAdapter (this,android.R.layout.simple_expandable_list_item_1,cursor,new String[]{"name"},new
int[]{android.R.id.text1});
setListAdapter(simpleCursorAdapter);
}
}
SimpleCursorAdapter類構造方法的第四個參數表示返回Cursor對象中的字段名,第五個參數表示要將該字段的值賦給那個組件。該組件在第二個參數中指定的佈局文件中定義。
注意:在綁定數據時,Cursor對象返回的記錄集中必須包含一個叫"_id"的字段,否則將無法完成數據綁定。也就是說SQL語句不能是select name from t_contacts.如果在數據表中沒有"_id"字段,可以採用其他方法來處理。
讀到這裏可能有人要問:數據存到哪裏去了?系統在手機內存中的/data/data/<package name>/databases目錄中創建數據庫文件。
SimpleCursorAdapter類與數據綁定
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.