亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

自定義ContentProvider

2019-11-09 14:33:32
字體:
來源:轉載
供稿:網友

自定義ContentPRovider

AndroidManifest.xml

在manifest節點下添加兩個permission,作為讀取和修改的權限。
<!-- 定義讀取權限 --><permission android:name="com.blog.demo.READ_PEOPLE" /><!-- 定義修改權限 --><permission android:name="com.blog.demo.WRITE_PEOPLE" />在application界面下添加provider節點
<!-- com.blog.demo.content作為標識 --><!-- 內容在PeopleContentProvider中實現 --><!-- 設置讀寫權限 --><!-- 設置export為true,對其他apk開放  --><provider	android:authorities="com.blog.demo.content"	android:name=".PeopleContentProvider"	android:readPermission="com.blog.demo.READ_PEOPLE"	android:writePermission="com.blog.demo.WRITE_PEOPLE"	android:exported="true" />

PeopleContentProvider

PeopleContentProvider繼承了ContentProvider,實現了各種操作的接口。首先需要定義我們自己的UriMatcher來解析傳遞過來的uri,分別定義了“people”和“people/#”兩種,在查詢時會進行區分。
private static final int PEOPLE      = 1;private static final int PEOPLE_ID   = 2;private static final UriMatcher uriMatcher;static {	uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);	uriMatcher.addURI(AUTHORITY, "people", PEOPLE);	uriMatcher.addURI(AUTHORITY, "people/#", PEOPLE_ID);}@Nullable@Overridepublic String getType(Uri uri) {	switch(uriMatcher.match(uri)) {		case PEOPLE: // 集合類型 vnd.android.cursor.dir			return "vnd.android.cursor.dir/com.blog.demo.people";		case PEOPLE_ID: // 非集合類型 vnd.android.cursor.item			return "vnd.android.cursor.item/com.blog.demo.people";		default:			throw new IllegalArgumentException("Unsupported URI: " + uri);	}}其次我們需要創建一個數據庫,在onCreate里面創建。
private PeopleSQLiteOpenHelper helper;@Overridepublic boolean onCreate() {	helper = new PeopleSQLiteOpenHelper(getContext());	return true;}

public class PeopleSQLiteOpenHelper extends SQLiteOpenHelper {    public final static String LOGTAG = "PeopleSQLiteOpenHelper";    public final static String DB_NAME = "people.db";    public final static String TABLE_NAME = "people";    public final static int VERSION = 1;    public final static String COL_ID   = "_id";    public final static String COL_NAME = "name";    public final static String COL_ADDR = "addr";    public final static String COL_AGE  = "age";    public final static String TABLE_CREATE = 			"create table if not exists " + TABLE_NAME + "("            + COL_ID + " integer primary key autoincrement not null,"            + COL_NAME + " text not null, "            + COL_ADDR + " text not null, "            + COL_AGE + " integer "            + ")";    public PeopleSQLiteOpenHelper(Context context) {        this(context, DB_NAME, null, VERSION);    }    public PeopleSQLiteOpenHelper(Context context, String name,			SQLiteDatabase.CursorFactory factory, int version) {        super(context, name, factory, version);        LogUtil.log(LOGTAG, "name = " + name + " version = " + version);    }    @Override    public void onCreate(SQLiteDatabase db) {        LogUtil.log(LOGTAG, "onCreate");        db.execSQL(TABLE_CREATE);    }    @Override    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {        LogUtil.log(LOGTAG, "onUpgrade");    }}

最后實現各種操作方法
@Nullable@Overridepublic Cursor query(Uri uri, String[] projection, String selection,		String[] selectionArgs, String sortOrder) {	LogUtil.log(LOGTAG, "query");	if (uriMatcher.match(uri) == PEOPLE) {		// 查詢所有people數據		return helper.getReadableDatabase().query(TABLE_NAME, projection,				selection, selectionArgs, null, null, sortOrder);	} else if (uriMatcher.match(uri) == PEOPLE_ID) {		// 查詢所有指定id的people數據		String id = uri.getPathSegments().get(1);		return helper.getReadableDatabase().query(TABLE_NAME, projection, 				PeopleSQLiteOpenHelper.COL_ID +"=?", new String[]{id},				null, null, sortOrder);	}	return null;}@Nullable@Overridepublic Uri insert(Uri uri, ContentValues values) {	if (uriMatcher.match(uri) == PEOPLE) {		long rowid = helper.getWritableDatabase().insert(TABLE_NAME, null, values);		if (rowid > 0) {			Uri rowUri = ContentUris.withAppendedId(uri, rowid);			getContext().getContentResolver().notifyChange(rowUri, null);			return rowUri;		}		throw new SQLException("Failed to insert row into " + uri);	}	throw new IllegalArgumentException("Unsupported URI: " + uri);}@Overridepublic int delete(Uri uri, String selection, String[] selectionArgs) {	if (uriMatcher.match(uri) == PEOPLE) {		return helper.getWritableDatabase().delete(TABLE_NAME, 				selection, selectionArgs);	} else if (uriMatcher.match(uri) == PEOPLE_ID) {		String id = uri.getPathSegments().get(1);		return helper.getWritableDatabase().delete(TABLE_NAME,				PeopleSQLiteOpenHelper.COL_ID +"=?", new String[]{id});	}	throw new IllegalArgumentException("Unsupported URI: " + uri);}@Overridepublic int update(Uri uri, ContentValues values, String selection,			String[] selectionArgs) {	if (uriMatcher.match(uri) == PEOPLE) {		return helper.getWritableDatabase().update(TABLE_NAME, values,				selection, selectionArgs);	} else if (uriMatcher.match(uri) == PEOPLE_ID) {		String id = uri.getPathSegments().get(1);		return helper.getWritableDatabase().update(TABLE_NAME, values,				PeopleSQLiteOpenHelper.COL_ID +"=?", new String[]{id});	}	throw new IllegalArgumentException("Unsupported URI: " + uri);}

讀取自定義ContentProvider

在AndroidManifest.xml文件中,添加權限。
<uses-permission android:name="com.blog.demo.READ_PEOPLE"/><uses-permission android:name="com.blog.demo.WRITE_PEOPLE"/>使用getContentResolver來操作數據
// 查詢數據private List<People> query() {	List<People> list = new ArrayList<People>();	Cursor cursor = getContentResolver().query(Content.People.CONTENT_URI,			null, null, null, null);	if (cursor != null) {		while (cursor.moveToNext()) {			int id = cursor.getInt(cursor.getColumnIndex(PeopleColumns.ID));			String name = cursor.getString(cursor.getColumnIndex(PeopleColumns.NAME));			String addr = cursor.getString(cursor.getColumnIndex(PeopleColumns.ADDR));			int age = cursor.getInt(cursor.getColumnIndex(PeopleColumns.AGE));			list.add(new People(id, name, addr, age));		}		cursor.close();	}	return list;}// 查詢數據private People query(int id) {	Cursor cursor = getContentResolver().query(		ContentUris.withAppendedId(Content.People.CONTENT_URI, id),		null, null, null, null);	People people = null;	if (cursor != null) {		if (cursor.moveToNext()) {			int rid = cursor.getInt(cursor.getColumnIndex(PeopleColumns.ID));			String name = cursor.getString(cursor.getColumnIndex(PeopleColumns.NAME));			String addr = cursor.getString(cursor.getColumnIndex(PeopleColumns.ADDR));			int age = cursor.getInt(cursor.getColumnIndex(PeopleColumns.AGE));			people = new People(rid, name, addr, age);		}		cursor.close();	}	return people;}// 插入數據private void insert(String name, String addr, String age) {	ContentValues insertValues = new ContentValues();	insertValues.put(PeopleColumns.NAME, name);	insertValues.put(PeopleColumns.ADDR, addr);	insertValues.put(PeopleColumns.AGE, age);	getContentResolver().insert(Content.People.CONTENT_URI, insertValues);}// 修改數據private void update(int id, String name, String addr, String age) {	ContentValues updateValues = new ContentValues();	updateValues.put(PeopleColumns.NAME, name);	updateValues.put(PeopleColumns.ADDR, addr);	updateValues.put(PeopleColumns.AGE, age);	getContentResolver().update(ContentUris.withAppendedId(			Content.People.CONTENT_URI, id),			updateValues, null, null);}// 刪除數據private void delete(int id) {	getContentResolver().delete(ContentUris.withAppendedId(			Content.People.CONTENT_URI, id), null, null);}也可以用其他方式去修改和刪除數據
// 修改數據private void update(int id, String name, String addr, String age) {	ContentValues updateValues = new ContentValues();	updateValues.put(PeopleColumns.NAME, name);	updateValues.put(PeopleColumns.ADDR, addr);	updateValues.put(PeopleColumns.AGE, age);	getContentResolver().update(Content.People.CONTENT_URI, updateValues, 			PeopleColumns.ID + "=?",			new String[] { Integer.toString(id) });}// 刪除數據private void delete(int id) {	getContentResolver().delete(Content.People.CONTENT_URI, 			PeopleColumns.ID + "=?", new String[] {Integer.toString(id)});}輔助類Content
public class Content {	public final static class People {		public final static Uri CONTENT_URI = 				Uri.parse("content://com.blog.demo.content/people");				public final static class PeopleColumns {			public final static String ID 	= "_id";			public final static String NAME = "name";			public final static String ADDR = "addr";			public final static String AGE 	= "age";		}			}}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情一区二区久久久| 国产精品久久久久久婷婷天堂| 欧美电影免费观看电视剧大全| 亚洲综合第一页| 日韩av理论片| 国产精品91一区| 国产精品久久久久国产a级| 在线成人中文字幕| 日韩一级裸体免费视频| 久久久久久91| 一区二区三区日韩在线| 成人福利免费观看| 日韩中文字幕在线播放| 久久久久久久久久国产| 国产精品偷伦视频免费观看国产| 黑人巨大精品欧美一区二区一视频| 久久久久久69| 亚洲国产天堂久久国产91| 午夜精品三级视频福利| 日本久久久久久| 久久精品国产清自在天天线| 亚洲2020天天堂在线观看| 一个人www欧美| 欧美日韩福利在线观看| 美日韩丰满少妇在线观看| 国产91在线播放九色快色| 久久久精品2019中文字幕神马| 日韩一区视频在线| 国产成人综合久久| 久久久久久久久久久久久久久久久久av| 久久精品中文字幕| 亚洲第一免费播放区| 欧美激情精品久久久久久| 国产精品丝袜视频| 久久久极品av| 俺也去精品视频在线观看| 亚洲免费中文字幕| 久久躁日日躁aaaaxxxx| 亚洲欧洲自拍偷拍| 2020欧美日韩在线视频| 91国产中文字幕| 国产噜噜噜噜噜久久久久久久久| 欧美极品xxxx| 精品亚洲精品福利线在观看| 91精品啪在线观看麻豆免费| 91亚洲午夜在线| 日本午夜精品理论片a级appf发布| 欧美电影免费观看电视剧大全| 日韩av在线影院| 亚洲精品久久久久久下一站| 亚洲女人天堂视频| 国产主播精品在线| 日韩av片永久免费网站| 久久精品国产v日韩v亚洲| 国产精品亚洲一区二区三区| 久久久亚洲欧洲日产国码aⅴ| 国产精品欧美一区二区| 国产精品视频xxx| 日韩的一区二区| 久久夜精品香蕉| 欧美激情欧美狂野欧美精品| 97超碰蝌蚪网人人做人人爽| 色综合91久久精品中文字幕| 狠狠色狠狠色综合日日小说| 欧美色视频日本高清在线观看| 91精品视频在线免费观看| 欧美性xxxx18| 另类少妇人与禽zozz0性伦| 国产精品一区二区av影院萌芽| 欧美日韩国产一区二区| 欧美综合一区第一页| 精品无人区乱码1区2区3区在线| 欧美精品在线观看| 成人国产精品免费视频| 欧美综合第一页| 亚洲偷熟乱区亚洲香蕉av| 日韩中文字幕网站| 日韩黄色高清视频| 国产精品一区二区久久久久| www.欧美免费| 亚洲国产毛片完整版| 青草成人免费视频| 久久天天躁日日躁| 欧美激情喷水视频| 久久亚洲一区二区三区四区五区高| 久久久精品视频在线观看| 国产三级精品网站| 亚洲香蕉在线观看| 久久久久久久一区二区| 国产亚洲欧美aaaa| 午夜精品久久久99热福利| 亚洲网站在线看| 狠狠综合久久av一区二区小说| 欧美精品久久久久久久久| 久久国产精品99国产精| 国产一区二区黑人欧美xxxx| 欧美激情一区二区三区成人| 久久伊人精品一区二区三区| 国内精品久久久久影院优| www.日韩av.com| 久久夜色精品国产| 欧美电影免费观看网站| 国产精品网址在线| 国产精品久久久久久久久久ktv| 日韩欧美aaa| 欧美日韩中文字幕日韩欧美| 亚洲精品xxx| 国产一区二区三区精品久久久| 91成人天堂久久成人| 福利视频一区二区| 欧美日韩中文字幕| 中文字幕免费国产精品| 欧美成人激情视频免费观看| 国产成人精品视频| 欧美激情亚洲综合一区| 国产精品福利网| 久久亚洲欧美日韩精品专区| 一区二区三区四区视频| 亚洲美女动态图120秒| 91美女片黄在线观看游戏| 日韩欧美a级成人黄色| 爽爽爽爽爽爽爽成人免费观看| 国产成人小视频在线观看| 538国产精品一区二区免费视频| 欧美成人免费观看| 久久好看免费视频| 亚洲精品720p| 性色av一区二区三区在线观看| 亚洲一区二区三区在线免费观看| 亚洲专区国产精品| 国模私拍一区二区三区| 这里只有视频精品| 久久99精品国产99久久6尤物| 日韩成人小视频| 91影视免费在线观看| 欧美日韩另类字幕中文| 91精品在线影院| 欧美在线视频免费播放| 这里只有精品在线播放| 亚洲片在线观看| 国产日韩精品在线观看| 国产精品久久婷婷六月丁香| 97视频在线播放| 欧美夫妻性生活xx| 国产乱人伦真实精品视频| 91精品国产91久久久久久久久| 一区二区日韩精品| 国产精品免费一区二区三区都可以| 欧美成人午夜剧场免费观看| 国外成人性视频| 这里只有精品视频在线| 在线激情影院一区| 久久久久久亚洲精品不卡| 国产成人精品视频在线观看| 国产精品美女午夜av| 青草青草久热精品视频在线网站| 欧美wwwxxxx| 日韩免费av一区二区| 亚洲va久久久噜噜噜久久天堂| 亚洲精品电影在线| 成人信息集中地欧美| 欧美视频免费在线观看| 国产网站欧美日韩免费精品在线观看| 欧美一级电影免费在线观看|