Android數據存儲_數據存儲的幾種方式


Android的數據存儲:
1.SharePreference。
2.內置的SQLite數據庫。
3.ContentProvider實現數據共享。
4.Networks。
5.File IO。

 

 

SharePreference:

保存應用程序的各種配置信息,存儲的數據一般只能供本應用程序調用,不對外共享。

1.調用getSharePreferences()方法創建對象;

2.調用edit()方法獲得Editor對象,供讀寫數據:getXxx(),putXxx(),remove(),commit()。

例:

SharePreference共享數據的讀取
/**
         * 按下btn_write時,存放SHARED_MSGi,i=1,2,3,4,5到SETTING_PREF內容文件      
         */
        btn_write.setOnClickListener(new Button.OnClickListener() {
            public void onClick(View v){
                
                int int2 = Integer.parseInt(mEditText02.getText().toString());
                long long3 = Long.parseLong(mEditText03.getText().toString());
                float float4 = Float.parseFloat(mEditText04.getText().toString());
                boolean boolean5 = true;
                if (mRadioButton01.isChecked()){
                    boolean5 = true;
                } else if (mRadioButton02.isChecked()) {
                    boolean5 = false;
                }
                SharedPreferences settings = getSharedPreferences(SETTING_PREF, MODE_PRIVATE);
                settings.edit()
                .putString(SHARED_MSG1, mEditText01.getText().toString())
                .putInt(SHARED_MSG2, int2)
                .putLong(SHARED_MSG3, long3)
                .putFloat(SHARED_MSG4, float4)
                .putBoolean(SHARED_MSG5, boolean5)
                .commit();
            }
        });
        
        /**
         * 按下btn_read時,讀取SETTING_PREF內容文件的SHARED_MSGi,i=1,2,3,4,5
         */
        btn_read.setOnClickListener(new Button.OnClickListener() {
            public void onClick(View v){
                SharedPreferences settings = getSharedPreferences(SETTING_PREF, 0);
                String msg1 = settings.getString(SHARED_MSG1, "");
                mEditText01.setText(msg1);
                int defint2 = 0;
                int msg2_int = settings.getInt(SHARED_MSG2, defint2);
                String msg2 = String.valueOf(msg2_int);
                mEditText02.setText(msg2);
                long deflong3 = 0;
                long msg3_long = settings.getLong(SHARED_MSG3, deflong3);
                String msg3 = String.valueOf(msg3_long);
                mEditText03.setText(msg3);
                float deffloat4 = 0;
                float msg4_float = settings.getFloat(SHARED_MSG4, deffloat4);
                String msg4 = String.valueOf(msg4_float);
                mEditText04.setText(msg4);
                boolean defboolean5 = true;
                boolean msg5_boolean = settings.getBoolean(SHARED_MSG5, defboolean5);
                if (msg5_boolean) {
                    mRadioButton01.setChecked(true);
                    mRadioButton02.setChecked(false);
                    mRadioButton03.setChecked(false);
                } else {
                    mRadioButton01.setChecked(false);
                    mRadioButton02.setChecked(true);
                    mRadioButton03.setChecked(false);
                }
            }
在程序退出時存儲數據到SharePreference上,待下次啟動時再自動讀取設置好的初始值
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);        
        mEditText01 = (EditText)findViewById(R.id.EditText01);
        mEditText02 = (EditText)findViewById(R.id.EditText02);
        /**
         * 開機時,自SETTING_FILE內容文件取得NAME_MSG、MOBILE_MSG,並顯示在EditText01和EditText02
         */
        SharedPreferences settings = getSharedPreferences(SETTING_FILE, 0);
        String name_msg = settings.getString(NAME_MSG, "null");
        String mobile_msg = settings.getString(MOBILE_MSG, "null");
        mEditText01.setText(name_msg);
        mEditText02.setText(mobile_msg);
    }     
    @Override
    protected void onStop(){
        super.onStop();
        Toast.makeText(this, "onStop(): SharedPreferences存儲NAME_MSG、MOBILE_MSG到SETTING_FILE", Toast.LENGTH_SHORT).show();
        /**
         * 離開時,在onStop()程序中存放NAME_MSG、MOBILE_MSG到SETTING_FILE內容文件
         */
        SharedPreferences settings = getSharedPreferences(SETTING_FILE, 0);
        settings.edit()
        .putString(NAME_MSG, mEditText01.getText().toString())
        .putString(MOBILE_MSG, mEditText02.getText().toString())
        .commit();
    }

  

 

Android內置的SQLite數據庫:

1.Android提供了SQLiteDatabase代表一個數據庫,應用程序可通過創建SQLiteDatabase對象來操作數據庫.

其包含的靜態方法:

static SQLiteDatabase.openDatabase();

.openOrCreateDatabase():打開創建

execSQL():執行SQL語句.

beginTransaction();  endTransaction();  inTransaction(); 事務處理

insert(),update(),delete(),rawQuery(),Cursor,query()

2.Android SDK的tools目錄下還提供了sqlite3.exe工具,數據庫命令行管理工具.

3.數據庫幫助類SQLiteOpenHelper操作數據庫步驟

[SQLiteOpenHelper幫助類用來初始化數據庫實例,而真正的instance數據庫實例由SQLiteDatabase創建,當第一次執行時則調用onCreate()方法]

[SQLiteOpenHelper包裝省略了SQLiteDatabase連接數據庫的過程,助手類]

(1)創建一個類,繼承SQLiteOpenHelper抽象類,重寫構造函數傳入Context上下文,復寫抽象方法:

  onCreate():當第一次創建數據庫時回調該方法.

  onUpgrade()當數據庫版本更新時回調該方法

(2)調用SQLiteOpenHelper的getReadableDatabase()或getWriteableDatabase()方法,

這兩個方法可封裝於自定義的openDatabase()方法中,調用則會創建數據庫或打開數據庫連接。

這兩個方法打開數據庫連接后會獲得一個用於操作數據庫的SQLiteDatabase對象,就可以開始對數據庫的增刪查改操作。

 [getReadableDatabase()或getWriteableDatabase()方法調用后當數據庫不存在時會自動觸發onCreate()方法創建數據庫]

(3)調用SQLiteDatabase的方法執行SQL語句操作數據庫。

(4)處理SQL語句執行后返回的結果。

(4)調用.close()關閉數據庫連接。

 例:

本范例說明數據庫的建立,數據添加,更新,刪除,檢索
/**
 * 本范例說明數據庫的建立,數據添加,更新,刪除,檢索
 * @author Administrator
 *
 */
public class SQLiteTest extends Activity {
    
    OnClickListener listener_add = null;//監聽器類
    OnClickListener listener_update = null;
    OnClickListener listener_delete = null;
    OnClickListener listener_clear = null;
    Button button_add;
    Button button_update;
    Button button_delete;
    Button button_clear;
    DBConnection dbhelper;  //DBConnection為自定義內部類,extends SQLiteOpenHelper
    public int id_this;
    public interface UserSchema {  //定義接口包裝數據庫表名和字段名
            String TABLE_NAME = "Users";          //Table Name
            String ID = "_id";                    //ID
            String USER_NAME = "user_name";       //User Name
            String ADDRESS = "address";           //Address
            String TELEPHONE = "telephone";       //Phone Number
            String MAIL_ADDRESS = "mail_address"; //Mail Address
        }
    
    
    @Override
    public void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        final EditText mEditText01 = (EditText)findViewById(R.id.EditText01);
        final EditText mEditText02 = (EditText)findViewById(R.id.EditText02);
        final EditText mEditText03 = (EditText)findViewById(R.id.EditText03);
        final EditText mEditText04 = (EditText)findViewById(R.id.EditText04);
        
        dbhelper = new DBConnection(this);
        final SQLiteDatabase db = dbhelper.getWritableDatabase();    
        final String[] FROM = 
        {   
            UserSchema.ID,
            UserSchema.USER_NAME,
            UserSchema.TELEPHONE,
            UserSchema.ADDRESS, 
            UserSchema.MAIL_ADDRESS
        };
       
        Cursor c = db.query(UserSchema.TABLE_NAME, new String[] {UserSchema.USER_NAME}
               , null, null, null, null, null);   //查詢Users表,讀取所有的user_name,保存在游標Cursor中       
        /*query(SQLiteDatabase db, String[] projectionIn, String selection, String[] selectionArgs, String groupBy, String having, String sortOrder, String limit)
         * 第一個參數為要查詢的數據庫實例。
         * 第二個參數是一個字符串數組,里邊的每一項代表了需要返回的列名。屬性名
         * 第三個參數相當於SQL語句中的where部分。
         * 第四個參數是一個字符串數組,里邊的每一項依次替代在第三個參數中出現的問號(?)。
         * 第五個參數相當於SQL語句當中的groupby部分。
         * 第六個參數相當於SQL語句當中的having部分。
         * 第七個參數描述是怎么進行排序。
         * 第八個參數相當於SQL當中的limit部分,控制返回的數據的個數。*/
        c.moveToFirst();
        CharSequence[] list = new CharSequence[c.getCount()];
        /*CharSequence是char的包裝接口,不能使用new來進行賦值,
         * 可以定義:CharSequence cs="hello";
         * 不能定義:CharSequence cs=new CharSequence("hello");
         * 但此處定義的是對象數組,還沒有實例化,元素為null*/
        for (int i = 0; i < list.length; i++) {
                list[i] = c.getString(0);
                c.moveToNext();
        }
        c.close(); //關閉Cursor
        
        /**
         * list
         */
        Spinner spinner = (Spinner)findViewById(R.id.Spinner01); //取得所有數據的USER_NAME,放置在list[]上
        spinner.setAdapter(new ArrayAdapter<CharSequence>(this, android.R.layout.simple_spinner_item, list));
        
        spinner.setOnItemSelectedListener(new OnItemSelectedListener(){
            //在Spinner下拉列表上選定查詢的數據,顯示所有數據在畫面上
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                
                String user_name = ((Spinner)parent).getSelectedItem().toString();
                Cursor c = db.query("Users", FROM ,  //查詢User表,讀取符合變量user_name的所有數據(FROM)
                        "user_name='" + user_name + "'", null, null, null, null);
                c.moveToFirst();
                id_this = Integer.parseInt(c.getString(0)); //將查詢到的個人數據的ID賦值給id_this,以便以后更新或檢索時用
                      
                String user_name_this = c.getString(1);  //讀取所有個人數據
                String telephone_this = c.getString(2);
                String address_this = c.getString(3);
                String mail_address_this = c.getString(4);
                c.close();    //關閉Cursor
                mEditText01.setText(user_name_this);
                mEditText02.setText(telephone_this);
                mEditText03.setText(address_this);
                mEditText04.setText(mail_address_this);
            }
            public void onNothingSelected(AdapterView<?> parent) {
            }
        });   
        
        /**
         * 按下[Add]按鈕時,新增一行數據
         */
        listener_add = new OnClickListener() {    
            public void onClick(View v) {
                ContentValues values = new ContentValues();//創建ContentValues類的對象,存儲鍵值對,進行數據庫操作
                values.put(UserSchema.USER_NAME, mEditText01.getText().toString());
                values.put(UserSchema.TELEPHONE, mEditText02.getText().toString());
                values.put(UserSchema.ADDRESS, mEditText03.getText().toString());
                values.put(UserSchema.MAIL_ADDRESS, mEditText04.getText().toString());
                
                SQLiteDatabase db = dbhelper.getWritableDatabase();  //創建數據庫連接
                db.insert(UserSchema.TABLE_NAME, null, values);  //插入數據到數據庫
                db.close();  //關閉數據庫
                onCreate(savedInstanceState);  //重新執行本程序,即實現建立新的下拉列表和數據
            }
        };
        
        /**
         * 按下[Update]按鈕時,更新一行數據
         */
        listener_update = new OnClickListener() {
            public void onClick(View v) {
                ContentValues values = new ContentValues();
                values.put(UserSchema.USER_NAME, mEditText01.getText().toString());
                values.put(UserSchema.TELEPHONE, mEditText02.getText().toString());
                values.put(UserSchema.ADDRESS, mEditText03.getText().toString());
                values.put(UserSchema.MAIL_ADDRESS, mEditText04.getText().toString());
                
                String where = UserSchema.ID + " = " + id_this;
                SQLiteDatabase db = dbhelper.getWritableDatabase();
                db.update(UserSchema.TABLE_NAME, values, where ,null);//以where子句查詢到該行數據並以values的值更新
                db.close();
                onCreate(savedInstanceState);
            }
        };
        
        /**
         * 按下[Delete]按鈕時,刪除一行數據
         */
        listener_delete = new OnClickListener() {
            public void onClick(View v) {
                String where = UserSchema.ID + " = " + id_this;
                SQLiteDatabase db = dbhelper.getWritableDatabase();
                db.delete(UserSchema.TABLE_NAME, where ,null);//以where子句查詢到該行數據並刪除
                db.close();
                onCreate(savedInstanceState);
            }
        };
        /**
         * 按下[Clear]按鈕時,清空編輯框
         */
        listener_clear = new OnClickListener() {
            public void onClick(View v) {
                mEditText01.setText("");
                mEditText02.setText("");
                mEditText03.setText("");
                mEditText04.setText("");
            }
        };
        
        //設定BUTTON0i,i=1,2,3,4的OnClickListener
        button_add = (Button)findViewById(R.id.Button01);
        button_add.setOnClickListener(listener_add);
        button_update = (Button)findViewById(R.id.Button02);
        button_update.setOnClickListener(listener_update);
        button_delete = (Button)findViewById(R.id.Button03);
        button_delete.setOnClickListener(listener_delete);    
        button_clear = (Button)findViewById(R.id.Button04);
        button_clear.setOnClickListener(listener_clear);    
    }
    
    /**
     * 助手類,用以創建數據庫連接
     * @author Administrator
     *
     */
    public static class DBConnection extends SQLiteOpenHelper {  
        private static final String DATABASE_NAME = "PhoneBookDB";
        private static final int DATABASE_VERSION = 1;
        private DBConnection(Context ctx) {
            super(ctx, DATABASE_NAME, null, DATABASE_VERSION);
        }
        public void onCreate(SQLiteDatabase db) {
            //創建TABLE表Users
            String sql = "CREATE TABLE " + UserSchema.TABLE_NAME + " (" 
            + UserSchema.ID  + " INTEGER primary key autoincrement, " 
            + UserSchema.USER_NAME + " text not null, " 
            + UserSchema.TELEPHONE + " text not null, " 
            + UserSchema.ADDRESS + " text not null, "
            + UserSchema.MAIL_ADDRESS + " text not null "+ ");";
            //Log.i("haiyang:createDB=", sql);
            db.execSQL(sql);    
        }
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // TODO Auto-generated method stub    
        }
    }
}
本范例介紹當有大量輸入數據時,如何建立一個SQLite數據庫
/**
 * 本范例介紹當有大量輸入數據時,如何建立一個SQLite數據庫並將所有數據保存入庫
 * 如何檢索關聯數據庫
 * 添加數據庫的事務處理
 * @author Administrator
 *
 */
public class SQLite extends Activity {
    
    private DatabaseHelper helper;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    
        helper = new DatabaseHelper(this); //DatabaseHelper自定義助手類建立數據庫和相應的表:StudentDB;students,courses;
        final SQLiteDatabase db = helper.getReadableDatabase();    //創建數據庫連接,返回SQLiteDatabase對象
        
        /*----------在Student表中檢索所有的student_no,將查詢結果保存在list中,綁定在Spinner上顯示----------*/
        Cursor c = db.query("students", new String[] {"student_no"}
               , null, null, null, null, null); //檢索查詢student_no,返回Cursor
        c.moveToFirst();
        CharSequence[] list = new CharSequence[c.getCount()];  //CharSequence[]數組
        for (int i = 0; i < list.length; i++) {
            list[i] = c.getString(0);  //將student_no數據保存在list[]中
            c.moveToNext();
        }
        c.close();  //關閉Cursor        
        Spinner spinner = (Spinner)findViewById(R.id.Spinner01);
        spinner.setAdapter(new ArrayAdapter<CharSequence>(this
                , android.R.layout.simple_spinner_item, list));  //將list綁定在Spinner上顯示
        
        
        spinner.setOnItemSelectedListener(new OnItemSelectedListener() {            
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                
                String student_no = ((Spinner)parent).getSelectedItem().toString();//獲取被選擇的student_no
                
                /*--------在Student表中由student_no查詢student_name,並將查詢結果顯示在textView上----------*/
                Cursor c;
                c = db.query("students", new String[] {"student_name"}
                     , "student_no='" + student_no + "'", null, null, null, null);                   
                c.moveToFirst();
                String student_this = c.getString(0);
                c.close();                
                TextView textView = (TextView)findViewById(R.id.TextView01);
                textView.setText(student_this);  
                
                /*---在Course表中由student_no查詢student_name,並將查詢結果保存在list[]中,綁定在ListView上顯示---*/
                c = db.query("courses", new String[] {"course_name"}
                     , "student_no='" + student_no + "'", null, null, null, null);                   
                c.moveToFirst();
                CharSequence[] list = new CharSequence[c.getCount()];
                for (int i = 0; i < list.length; i++) {
                    list[i] = c.getString(0);  
                    c.moveToNext();
                }
                c.close();
                ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(SQLite.this
                        , android.R.layout.simple_list_item_1, list);
                ListView listView = (ListView)findViewById(R.id.ListView01);
                listView.setAdapter(adapter);   
            }
            public void onNothingSelected(AdapterView<?> parent) {
            }        
        });    
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        helper.close();  //Activity銷毀前關閉數據庫連接
    }

    /*-------------------自定義助手類繼承SQLiteOpenHelper用於建立數據庫和相應的表-------------------------*/
    class DatabaseHelper extends SQLiteOpenHelper {
        //SQLiteOpenHelper-建立數據庫StudentDB和Table:students,Table:courses
        private static final String DATABASE_NAME = "StudentDB";
        private static final int DATABASE_VERSION = 1;
        //Table:students的數據
        private String[][] STUDENTS = {
            {"A-123","Macoto Lin"},
            {"B-456","Hatusko Ueno"},
            {"C-789","Wilson Lin"},
        };
        //Table:courses的數據
        private String[][] COURSES = {
            {"A-123","Japanese"},
            {"A-123","Computer"},
            {"A-123","English"},
            {"B-456","English"},
            {"B-456","Computer"},
            {"C-789","Computer"},
        };
        public DatabaseHelper(Context context) {
            
            super(context, DATABASE_NAME, null, DATABASE_VERSION); //此處創建數據庫"StudentDB"
            
        }
        @Override
        public void onCreate(SQLiteDatabase db) {
            
            db.beginTransaction();  //此處加入事務處理Transaction
            try {
                
                SQLiteStatement stmt;  //SQLiteStatement
                /*Statement是Java執行數據庫操作的一個重要方法,用於在已經建立數據庫連接的基礎上,向數據庫發送要執行的SQL語句。 */

                String sql01 = "create table students (student_no text primary key, student_name text not null);";
                db.execSQL(sql01);    //執行SQL語句,創建Student表    
                stmt = db.compileStatement("insert into students values (?, ?);");
                /*用compileStatement方法封裝SQL語句,可以重復編譯SQL語句,
                 * 用?作為參數可以將后續數據連結進來,連結方式:
                 * bindString連結字符串,bindLong連接數據
                 * 此處用for循環,一行一行連接數據,再一行一行執行SQL語句*/
                for (String[] studentname : STUDENTS) {
                    stmt.bindString(1, studentname[0]);
                    stmt.bindString(2, studentname[1]);
                    stmt.executeInsert();
                }
                
                String sql02 = "create table courses (student_no text not null, course_name text not null);";
                db.execSQL(sql02); //創建courses表
                stmt = db.compileStatement("insert into courses values (?, ?);");
                for (String[] coursename : COURSES) {
                    stmt.bindString(1, coursename[0]);
                    stmt.bindString(2, coursename[1]);
                    stmt.executeInsert();
                }
                
                db.setTransactionSuccessful(); //調用該方法,當處理數據不完整時可將數據回滾
                
            } finally {
                db.endTransaction();  //關閉事務
            }
        }
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        }    
    }
}

 

  

ContentProvider實現數據共享:

1.ContentProvider是不用應用程序之間進行數據交換的標准API,

ContentProvider提供存取數據的統一接口,使用它可實現在不同應用程序之間共享數據.

應用程序ContentResolver就猶如"網站",以URL的形式對外"暴露"數據.,允許其它應用程序訪問和修改數據. [~~數據庫操作]

Android為常見的一些數據提供了ContentProvider. [---主要是運用這些內置的]

2.URL:統一資源標識符

Android提供的ContentProvider都存放在android.provider包中.

ContentProvider提供的方法:insert(),delete(),update(),query(),getType().onCreate().

3.實現ContentProvider步驟:

(1)定義一個CONTENT_URI常量

(2)定義一個類,繼承ContentProvider類

(3)在AndroidManifest.xml文件中注冊<provider>

(4)實現所需的方法.

4.ContentProvider數據在Android中是以表的形式存在的-----數據庫.

Cursor:游標---query查詢,迭代輸出查詢結果.

uri.parse():將字符串轉換成uri----uriMatcher:匹配uri的工具類.

5.操作ContentProvider所暴露的數據:

(1)由getContentProvider()方法來獲取ContentResolver對象.

(2)調用ContentResolver方法操作數據:insert,delete,update,query

6.監聽ContentProvider數據改變:(Android提供的ContentObserver基類)

(1)創建一個類,繼承ContentObserver類

(2)重寫該基類所定義的onChange()方法

(3)向指定Uri注冊ContentObserver監聽器:registerContentObserver(....);

 例:

ContentProvider配置文件
 <provider android:name="TestProvider" 
        android:authorities="com.example.android.provider.testprovider" />
內容提供器Content Providers的構建
/**
 * 內容提供器Content Providers的構建:建立一個Sqlite數據庫系統來存儲和管理數據,用SQLiteDatabase管理數據庫
 * 1。創建一個類,繼承ContentProviders基類
 * 2。在AndroidManifest.xml中注冊這個ContentProviders
 */
public class TestProvider extends ContentProvider {
    
    DatabaseHelper databaseHelper;  //自定義內部類DatabaseHelper創建數據庫和表 
    
    /*----復寫extends ContentProvider的方法,采用ContentProviders方式操作數據庫---------*/
    @Override
    public boolean onCreate() {
        databaseHelper = new DatabaseHelper(getContext());
        return true;
    }
    @Override
    public Uri insert(Uri uri, ContentValues values) {
        SQLiteDatabase db = databaseHelper.getWritableDatabase();  //打開數據庫連接
        db.insert("test", null, values);  //操作數據庫
        return null;
    }
    @Override
    public Cursor query(Uri uri, String[] projection, String selection,
            String[] selectionArgs, String sortOrder) {
        SQLiteDatabase db = databaseHelper.getReadableDatabase();
        SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
        qb.setTables("test");
        Cursor c = qb.query(db, projection, selection, selectionArgs, null,
                null, null);
        return c;
    }
    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        return 0;
    }
    @Override
    public String getType(Uri uri) {
        return null;
    }
    @Override
    public int update(Uri uri, ContentValues values, String selection,
            String[] selectionArgs) {
        return 0;
    }
    
    /*------------------DatabaseHelper extends SQLiteOpenHelper建立test.db和Table:test--------------------*/
    private static class DatabaseHelper extends SQLiteOpenHelper {
        
        DatabaseHelper(Context context) {  
            super(context, "test.db", null, 1);  //調用構造方法創建數據庫test.db
        }        
        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL("CREATE TABLE test (" + BaseColumns._ID
                    + " INTEGER PRIMARY KEY," + "name TEXT,"
                    + "description TEXT" + ");");  //執行SQL語句創建表test
        }        
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL("DROP TABLE IF EXISTS test");
            onCreate(db);
        }
    }
}
采用ContentProviders方式處理數據
/**
 * Application A——————ContentProviders————Application B's Database
 *    內容提供器ContentProviders公開數據的方法
 * 本范例直接在程序內生產測試用的數據,然后檢索存儲在ContentProviders數據庫內的所有行,並用列表字段顯示出檢索結果
 */
public class ProviderTest extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        String struri = "content://com.example.android.provider.testprovider"; 
                            //程序就是通過這個URI找到內容提供器ContentProvider
        Uri uri = Uri.parse(struri); //將struri字符串轉換成uri
        getIntent().setData(uri); //設置當前活動程序Activity接口數據的Uri          
        Uri uri_test = getIntent().getData(); //取得當前活動程序Activity接口數據的Uri,並定義成Uri類變量uri_test
        
        ContentValues values = new ContentValues();
        values.put("name", "Macoto");
        values.put("description", "0932-158983");
        getContentResolver().insert(uri_test, values);  //采用ContentProviders方式添加數據1
        values.put("name", "Ming");
        values.put("description", "0932-123456");
        getContentResolver().insert(uri_test, values); //采用ContentProviders方式添加數據2
        
        Cursor cur = managedQuery(uri_test, null, null, null, null); 
              //采用ContentProviders方式檢索存儲在數據庫內的所有行.有兩種方法,ContentResolver.query()和Activity.managedQuery()
        cur.moveToFirst();   
        
        ArrayList<Map<String, Object>> data = new ArrayList<Map<String, Object>>();
        Map<String, Object> item;
        for (int i = 0; i < cur.getCount(); i++) {
                item = new HashMap<String, Object>();
                item.put("column00", cur.getString(0));
                item.put("column01", cur.getString(1));
                item.put("column02", cur.getString(2));
                data.add(item);        //將自數據庫讀出的數據整理到ArrayList data容器內
                cur.moveToNext();
        }
        cur.close();
        ListView mListView01 = new ListView(this);
        SimpleAdapter adapter = new SimpleAdapter(this //設置adapter封裝data數據
                , data
                , R.layout.main
                , new String[] {"column00", "column01", "column02" }
                , new int[] {R.id.TextView01, R.id.TextView02, R.id.TextView03 });
                /*將data數據的String[] {"column00", "column01", "column02" }放到顯示窗體的3個TextView上*/
        mListView01.setAdapter(adapter);  //綁定data數據到ListView
        
        setContentView(mListView01);   //將ListView放到顯示窗體上顯示   
    }
}

  

   

Networks:

WebView

 

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM