内容提供者 ContentProvider
来源:互联网 发布:毛笔字 知乎 编辑:程序博客网 时间:2024/06/05 16:14
ContentProvider概念
– 内容提供者是Android中的四大组件之一;
– 为存储和获取数据提供统一的接口;
– 可以在不同的应用程序之间共享数据;
下面几段代码实现的是创建数据库DB及表account,通过ContentProvide向表中添加数据的小例子;
SQLiteOpenHelper:
public class DbHelper extends SQLiteOpenHelper{ public DbHelper(Context context) { super(context, "DB", null, 1); //创建数据库“DB”; } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table account(id integer primary key, name text)"); //创建表account; } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { }}
SQLiteDatabase:
public class DbUtil{ DbHelper dbHelper; SQLiteDatabase db; public DbUtil(Context context) { dbHelper = new DbHelper(context); } private void open() //打开; { db = dbHelper.getWritableDatabase(); } private void close() //关闭; { db.close(); } public long insert(String table, ContentValues values) { open(); long code = db.insert(table, null, values); //向表table中插入数据values; close(); return code; }public void query(String table) { open(); Cursor cursor = db.rawQuery("select * from account", null); while(cursor.moveToNext()) { int id = cursor.getInt(cursor.getColumnIndex("id")); String name = cursor.getString(cursor.getColumnIndex("name")); System.out.println("id=" + id + ", name=" + name); } close(); }}
URI介绍
– 统一资源定位符,Universal Resource Identifier的简称;
–每一个ContentProvider都拥有一个公共的URI,这个URI用于表示所提供的ContentProvider的数据;
– Uri由以下三部分组成:“content://”、数据的路径、标识ID(可选);
– 每一个ContentProvider都拥有一个公共的URI,这个URI用于表示所提供的ContentProvider的数据;
UriMatcher类的介绍
– 用于操作Uri的工具类
UriMatcher类的主要方法
public void addURI (String authority, String path, int code)
注册所需的Uri
public int match (Uri uri) 与uri进行匹配
UriMatcher类的使用
– 初始化UriMatcher类
– 注册所需的Uri
– 与已经注册的Uri进行匹配
ContentProvider主要方法
boolean onCreate() ContentProvider创建后就执行
Uri insert(Uri uri, ContentValues values) 向ContentProvider添加数据
Cursor query(Uri uri, String[] projection,String selection, String[] selectionArgs, String sortOrder) 从ContentProvider查询数据
int update(Uri uri, ContentValues values,String selection, String[] selectionArgs)从ContentProvider更新数据
int delete(Uri uri, String selection, String[] selectionArgs)
从ContentProvider删除数据
ContentProvider实现过程
– 定义CONTENT_URI常量
– 定义类继承ContentProvider
– 实现onCreate、insert、query、delete、update、getType方法
– 在清单文件AndroidManifest.xml中声明
自定义ContentProvider步骤
– 创建保存数据的文件或者数据库
– 定义类继承ContentProvider,实现抽象类
– 在清单文件AndroidManifest.xml中注册ContentProvider
public class MyContentValues extends ContentProvider{ DbUtil dbUtil; static UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); //urimatcher用于操作uri的工具类; final static String AUTHORITY = "com.lu.contentprovider"; //清单文件中的authorities属性值; final static int URI_ACCOUNT = 1; //account表; static { uriMatcher.addURI(AUTHORITY, "account", URI_ACCOUNT); //注册所需的uri的code; } @Override public boolean onCreate() { dbUtil = new DbUtil(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) { int code = uriMatcher.match(uri); //match,与uri进行匹配; long l; switch(code) { case URI_ACCOUNT: l = dbUtil.insert("account", values); dbUtil.query("account"); //查询插入结果后的account表; break; } 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; }}
添加系统ContentProvider内容步骤
– 通过getContentResolver获取ContentResolver对象
– 获取ContentResolver的URI标识
– 将添加的内容封装到ContentValues中
– 通ContentResolver对象调用insert方法执行添加操作
查询系统ContentProvider内容步骤
– 通过getContentResolver获取ContentResolver对象
– 获取ContentResolver的URI标识
– 列出想要查询的列
– ContentResolver对象调用query方法执行查询
public class MainActivity extends Activity implements OnClickListener{ Button user, customer; ContentResolver resolver; final static String CONTENT_URI = "content://com.lu.contentprovider/"; String path = "data/data/com.lu.contentprovider/database/DB"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } private void init() { user = (Button)findViewById(R.id.button1); customer = (Button)findViewById(R.id.button2); user.setOnClickListener(this); customer.setOnClickListener(this); resolver = getContentResolver(); } @Override public void onClick(View v) { switch(v.getId()) { case R.id.button1: ContentValues values = new ContentValues(); values.put("name", "account"); resolver.insert(Uri.parse(CONTENT_URI + "account"), values); break; } }}
在清单文件中注册:
<provider android:name="com.lu.contentprovider.MyContentValues" android:authorities="com.lu.contentprovider" android:exported="true" //true时,其它程序通过此扩展访问> </provider>
- ContentProvider内容提供者
- Android ContentProvider(内容提供者)
- ContentProvider 内容提供者
- ContentProvider内容提供者(一)
- ContentProvider内容提供者(二)
- ContentProvider 内容提供者
- android内容提供者ContentProvider
- Android--- ContentProvider(内容提供者)
- ContentProvider内容提供者
- ContentProvider(内容提供者)
- ContentProvider(内容提供者)
- ContentProvider内容提供者
- ContentProvider 内容提供者
- ContentProvider 内容提供者
- contentprovider 自定义内容提供者
- ContentProvider内容提供者
- ContentProvider 内容提供者
- ContentProvider 内容提供者
- 实现一个简单的摄像功能(不带传输数据)代码片段
- http://jackwang1.blog.163.com/blog/static/39534478201182651610201/
- MySQL知识(十一)——使用正则表达式查询
- 鸟哥的Linux私房菜(服务器)- 第十八章、网络驱动器装置: iSCSI 服务器
- VA、VAO和VBO API备忘
- 内容提供者 ContentProvider
- 正则表达式
- iOS中让Settings Bundle中的变化立即在App中反应出来的两种方法
- 13.4 javascript事件类型
- Java命名规范
- grunt-contrib-connect 中间件middleware属性
- Trying to dismiss the presentation controller while transitioning already
- 电脑使用问题解决Point
- 在导航栏添加搜索框