ContentProvider簡單使用

2021-08-18 19:45:49 字數 3216 閱讀 5114

一是使用內容提供器讀取和操作其他應用程式的資料

二是建立內容提供器給該程式的資料提供外部訪問介面

如**簿,簡訊,**庫,都有內容提供器讓它們的資料有外部訪問介面

內容提供器提供的資料外部訪問介面是乙個uri.它由authority和path組成

path相當於不同的表加在authority的後面。如有表table1,table2

然後還要加上協議宣告:所以標準的內容uri格式如下:

上面的只是字元物件,要轉化成uri物件:

cursor cursor = getcontentresolver().query(

uri,

projection, //欄位名,列名,column1,column2

selection, //查詢條件 where column = value(?)佔位符

value, //佔位符具體的值

sortorder //排序方式, 例如 order by column1

);

if (cursor != null) 

cursor.close();

}

contentvalues values = new contentvalues();

values.put("column1" , "text");

values.put("colum2" , 2);

getcontentresolver().insert(uri , values);

contentvalues values = new contentvalues(); //更新之後的新值

values.put("column1" , "1"); //更新之後的新值

values.put("colum2" , 0); //更新之後的新值

//根據條件將 新值替換掉舊值

getcontentresolver().insert(uri , values , "column1 = ? and column2 = ?" , new string);

//根據條件刪除某條資料

getcontentresolver().delete(uri , "column2 = ?" , new string);

手機聯絡人的uri: 

contactscontract.commondatakinds.phone.content_uri

提供的字段有 name 和 手機號

contactscontract.commondatakinds.phone.display_name

contactscontract.commondatakinds.phone.number

想要獲取name 和 手機號,需要加許可權,還要動態申請許可權

read_contacts

兩個常用uri如下:

* : 表示匹配任意長度的任意字元

# : 表示匹配任意長度的數字

乙個完整的例子如下:

public class mycontentprovider extends contentprovider 

private mydatabasehelper dbhelper; //自己應用程式的sqlite幫助類

public mycontentprovider()

@override

public boolean oncreate()

@override

public cursor query(uri uri, string projection, string selection,

string selectionargs, string sortorder) , null , null , sortorder);

break;

default:

break;

}return cursor;

}@override

public uri insert(uri uri, contentvalues values)

return urireturn;

}@override

public int update(uri uri, contentvalues values, string selection,

string selectionargs) );

break;

default:

break;

}return updateids;

}@override

public int delete(uri uri, string selection, string selectionargs) );

break;

default:

break;

}return deleteids;

}@override

public string gettype(uri uri)

return null;

}}

理解**:

public class myprovider extends contentprovider 

@nullable

@override

public cursor query(uri uri, string projection, string selection, string selectionargs, string sortorder)

@nullable

@override

public string gettype(uri uri)

@nullable

@override

public uri insert(uri uri, contentvalues values)

@override

public int delete(uri uri, string selection, string selectionargs)

@override

public int update(uri uri, contentvalues values, string selection, string selectionargs)

}

如何新增Content Provider

一 寫在前面 一直很好奇系統是如何通過 content 來訪問歸屬地資料庫的,通過研究 和api參考文件以及網路上的資料基本上弄明白了,於是有了以下的內容。二 android content provider介紹 三 content provider的組成 四 新增content provider ...

ContentProvider基本使用

在不同應用之間實現資料共享,並保證安全性 比較 新增 沒有條件約束,刪除 沒有資料contentvalues getcontentresolver insert uri uri,contentvalues values getcontentresolver update uri uri,conten...

使用ContentProvider共享資料

當應用繼承contentprovider類,並重寫該類用於提供資料和儲存資料的方法,就可以向其他應用共享其資料。以前我們學習過檔案的操作模式,通過指定檔案的操作模式為context.mode world readable 或context.mode world writeable同樣可以對外共享資料...