SimpleCursorAdapter類與資料繫結

來源:互聯網
上載者:User

在許多時候需要將資料庫表中的資料顯示在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類的子類,用於操作資料庫,代碼如下:
Java代碼 
  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類的代碼如下:
    
Java代碼 
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目錄中建立資料庫檔案。

作者“myxuee”

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.