网友通过本文主要向大家介绍了安卓contentprovider,contentprovider,contentprovider详解,contentprovider实例,no content provider等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
安卓第十四天笔记-内容提供者(ContentProvider),contentprovider
安卓第十四天笔记-内容提供者(ContentProvider)
ContentProvider--内容提供者
1.ContentProvider简介
ContentProvider是不同应用程序之间进行数据交换的一种方式或者称标准API.
- ContentProvider以某种Uri的方式对外提供数据,允许其他应用访问或者修改数据
- 其它的程序根据Uri去访问操作指定的数据
2.Uri简介
http://www.qq.com:80/news.jsp
- http://:URL的协议部分,只要通过HTTP协议来访问网络,这具部分是固定的.如FTP
- www.qq.com:域名部分
- news.jsp:网站资源部分,访问不能的资源这具部分是不同的,这个部分是动态的
ContentProvider要求的;Uri与上面类似
content://com.pc.pp.provider/words
- content://这个Android的ContentProvider规定的,就像默认的http://,ContentProvider的协议默认就是Content://
- com.pc.pp.provider:这部分就是ContentProvider的authorities.系统就是由这具部分来找到操作哪个ContentProvider的.只要访问指定的ContentProvider,这个部分是固定的
- words:资源部分或者数据
3.建立ContentProvider
建立一个数据帮助类
public class BankSqliteOpenHelper extends SQLiteOpenHelper { public BankSqliteOpenHelper(Context context) { super(context, "bank.db", null, 1); } @Override public void onCreate(SQLiteDatabase db) { String sql = "create table account(_id integer primary key, name varchar(30),money double)"; db.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }
建立一个ContentProvider
/** 本地数据库的内容提供者, @author 刘楠 * 2016-3-2下午8:35:19 */ public class BankDbProvider extends ContentProvider { private static final String TAG = "BankDbProvider"; private static final int ACCOUNT = 0; private static final int ACCOUNT_ID = 1; //默认匹配,不能匹配就执行UriMatcher.NO_MATCH private static UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH); //数据库操作类 private BankSqliteOpenHelper helper; /** * 初始始化一些可以匹配的URI */ static { matcher.addURI("com.itheima.bankdb.BankDbProvider", "account", ACCOUNT); matcher.addURI("com.itheima.bankdb.BankDbProvider", "account/#", ACCOUNT_ID); } /** * 这个Provider被创建时执行,做一些初始始化操作 */ @Override public boolean onCreate() { helper = new BankSqliteOpenHelper(getContext()); return true; } /** * 查询操作 */ @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { if (matcher.match(uri) == ACCOUNT) { SQLiteDatabase db = helper.getReadableDatabase(); Cursor cursor = db.query("account", projection, selection, selectionArgs, null, null, sortOrder); return cursor; } else if (matcher.match(uri) == ACCOUNT_ID) { SQLiteDatabase db = helper.getReadableDatabase(); long id = ContentUris.parseId(uri); Cursor cursor = db.query("account", null, "_id=?", new String[] { id + "" }, null, null, sortOrder); return cursor; } return null; } /** * 返回类型,主要针对查询操作 * vnd.android.cursor.dir:表示返回多条数据 * vnd.android.cursor.item:表示返回一条数据 */ @Override public String getType(Uri uri) { if (matcher.match(uri) == ACCOUNT) { return "vnd.android.cursor.dir/account"; } else if (matcher.match(uri) == ACCOUNT_ID) { return "vnd.android.cursor.item/account"; } return null; } /** * 插入操作 */ @Override public Uri insert(Uri uri, ContentValues values) { if (matcher.match(uri) == ACCOUNT) { SQLiteDatabase db = helper.getWritableDatabase(); long insert = db.insert("account", null, values); db.close(); } return uri; } /** * 删除操作 */ @Override public int delete(Uri uri, String selection, String[] selectionArgs) { if (matcher.match(uri) == ACCOUNT) { SQLiteDatabase db = helper.getWritableDatabase(); int delete = db.delete("account", selection, selectionArgs); db.close(); return delete; } return 0; } /** * 更新操作 */ @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { if (matcher.match(uri) == ACCOUNT) { SQLiteDatabase db = helper.getWritableDatabase(); int update = db.update("account", values, selection, selectionArgs); db.close(); return update; } return 0; } }
在清单文件中注册这个provider
<!-- 注册Provider authorities:对外暴露的访问路径 --> <provider android:name="com.itheima.bankdb.provider.BankDbProvider" android:authorities="com.itheima.bankdb.BankDbProvider" > </provider>
authorities :可以随便定义,建立使用包名.Provider
4.访问这个应用程序的Provider
新建一个应用
ContentResolver resolver = getContentResolver(); 使用这个对象来实现对象Privoider的解析
/** * 插入数据 * * @param v */ public void insert(View v) { ContentResolver resolver = getContentResolver(); Uri uri =