Android——訪問其他程序中的數據之ContentResolver的基本用法

內容提供器的用法一般有兩種,一種是使用現有的內容提供器來讀取和操作響應程序的數據,另一種是創建自己內容提供器給我們程序的數據提供外部訪問接口。

ContentResolver的基本用法

 

對於一個應用,要訪問內容提供器中共享的數據,就一定要藉助ContentResolver類,可以通過Context中的getContentResolver()方法獲取該類的勢力,其中提供一系列方法對數據進行操作,其中insert()用於添加數據,update()用於更新數據,delete()用於刪除數據,query()用於更新數據。

不同於SQLiteDatabase,該類中增刪改查方法不接受表名參數,而使用uri參數代替,內容URI給內容提供器中的數據建立了唯一標識符,由authority和path組成。authority適用於對不同的應用進行區分的,比如一個程序的包名是com.xxx.app那麼該程序的authority可以命名爲com.xxx.app.provider。path是對同一個應用中不同的表做區分的eg:com.xxx.app.provider/table1和com.xxx.app.provider/table2

因此內用URI最標準的格式寫法如下:content://com.example.app.provider/table1

在得到了內容URI字符串之後,我們還需要將它解析成Uri對象纔可以作爲參數傳入

eg:Uri uri = Uri.parse("content://com.example.app.provider/table1");

只需要調用Uri.parse()方法就可以將URI字符串解析成Uri對象了

我們就可以使用這個Uri對象來查詢table1中的數據了

 

Cursor cursor = getContentResolver().query(
        uri,
        projection,
        selection,
        selectionArgs,
        sortOrder);

查詢完成後返回的仍然是一個Cursor對象,這時我們就可以將數據從Cursor對象中逐個讀取出來了。讀取的思路是通過移動遊標的位置來遍歷Cursor的所有行,然後再去出每一個行中相應列的數據,代碼如下
 

if (cursor!=null){
          while (cursor.moveToNext()){
              String colume1 = cursor.getString(cursor.getColumnIndex("column1"));
              int colume2 = cursor.getInt(cursor.getColumnIndex("column2"));
          }
    cursor.close();
}

增添一條數據

ContentValues values = new ContentValues();
        values.put("column1","text");
        values.put("column2",1);
        getContentResolver().insert(uri,values);

更新數據,藉助ContentResolver的update()方法來實現

ContentValues values = new ContentValues();
        values.put("column1","");
        getContentResolver().update(uri,values,"column1=?andcolumn2=?",new String[]{"text",1});

刪除數據

getContentResolver().delete(uri,"column2=?",new String[]{"1"});

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章