android開發 - Content Provider 內容提供者

來源:互聯網
上載者:User

標籤:android   android開發   



內容提供者:對外共用資料,讓應用間可以訪問資料


所共用的資料是任意類型的,可以是資料庫,xml,txt檔案


統一了資料的訪問方式




1.建立一個類,繼承 ContentProvider,會重寫父類的方法
  public class PersonProvider extends ContentProvider {


//當該類被執行個體化時被系統調用,只調用一次,一般用作資料初始化
@Override
public boolean onCreate() { 
return false;
}


//允許外部應用程式來內容提供者查詢的操作
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) { 
return null;
}


//返回要操作的資料的內容類型
@Override
public String getType(Uri uri) { 
return null;
}


//允許外部應用到內容提供者插入資料
@Override
public Uri insert(Uri uri, ContentValues values) { 
return null;
}


//允許外部應用到內容提供者刪除資料
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) { 
return 0;
}


//允許外部應用到內容提供者更新資料
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) { 
return 0;

}
  


2.在清單中配置,外界可以訪問該內容,必須是唯一標識,必須在   android系統的唯一標識,建議以公司的網域名稱為名稱,


  <provider android:name=".PersonProvider"            android:authorities="com.enenya.provides.personproviders" />
   這個authorities是訪問的唯一標識




3.如路徑:
  content://com.enenya.provides.personprovides/person/10
  content://   表示架構
  com.enenyaprovides.personprovider  表示主機名稱或authorities
  /person     表示路徑  (這裡的person指的是表,也可以是其它的,比如是檔案)
  /10         ID   










以下代碼是操作


1.先建立一個SQLiteOpenHelper操作類
  
  public class DBOpenHelper extends SQLiteOpenHelper {
public DBOpenHelper(Context context) {
super(context, "EnenyaDB.db", null, 1);
}


@Override
public void onCreate(SQLiteDatabase db) {
String sql = " create table person "; 
sql += " ( ";
sql += " personid integer primary key not null, ";
sql += " name varchar(50) null, ";
sql += " age integer null, ";
sql += " address text null ";
sql += " ) ";
db.execSQL(sql);
}


@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(" alter table person add amount integer ");

}




2.建立一個繼承ContentProvider類
  重寫必要的方法
  
public class PersonProvider extends ContentProvider {


private DBOpenHelper dbOpenHelper;
// 檢測Uri是否匹配
private static final UriMatcher MATCHER = new UriMatcher(
UriMatcher.NO_MATCH);
private static final int PERSONS = 1;
static {
// 添加Uri,路勁是person,匹配碼是1
MATCHER.addURI("com.enenya.provides.personprovides", "person", PERSONS);
}


// 當該類被執行個體化時被系統調用,只調用一次,一般用作資料初始化
@Override
public boolean onCreate() {
dbOpenHelper = new DBOpenHelper(this.getContext());
return false;
}


// 允許外部應用程式來內容提供者查詢的操作
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
return null;
}


// 返回要操作的資料的內容類型
@Override
public String getType(Uri uri) {
return null;
}


// 允許外部應用到內容提供者插入資料
@Override
public Uri insert(Uri uri, ContentValues values) {
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
Uri insertUri = null;
switch (MATCHER.match(uri)) {
case 1:
long rowid = db.insert("person", "name", values);
//返回新增加的這條記錄的Uri
   insertUri = Uri.parse("content://com.enenya.provides.personprovides/person/"+rowid);
//第二種 都可以
   //insertUri = ContentUris.withAppendedId(uri, rowid);
   break;
default:
throw new IllegalArgumentException("this is Unknown Uri:" + uri);
}
return insertUri;
}


// 允許外部應用到內容提供者刪除資料
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
//樣本暫時不寫了
return 0;
}


// 允許外部應用到內容提供者更新資料
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
//樣本不寫了
return 0;
}
}




3.從另一個應用調用這個應用的插入方法,使用內容提供者
  方法為;
    public void testInsert() throws Exception{
Uri uri = Uri.parse("content://com.enenya.provides.personprovides/person");
ContentResolver resolver = this.getContext().getContentResolver();
ContentValues values = new ContentValues();
values.put("name", "張三");
values.put("age", 21);
values.put("address", "bejing city");
resolver.insert(uri, values);

}



android開發 - Content Provider 內容提供者

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.