博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 数据存储——content providers
阅读量:4140 次
发布时间:2019-05-25

本文共 3038 字,大约阅读时间需要 10 分钟。

1.content providers数据共享原理:

当一个应用需要公开共享它的数据时,可以通过创建自己的content providers然后通过Manifest把content providers注册到android系统,然后其他应用通过contentresolver访问content providers的uri来操作指定的content providers,实际上,contentresolver就是相当于content providers的一个代理,其它应用程序通过contentresolver访问共享的content providers。
content providers是单例对象,既它只创建一次,后面对它的访问都是同一个实例
2.创建content providers,实现抽象类ContentProvider
//实现创建的时候接口
public abstract boolean onCreate();
当content providers第一次被访问,实例化时候它会被调用,以后的访问oncreate方法将不再被调用。
//实现查询的时候接口
public abstract Cursor query(Uri uri, String[] projection,
            String selection, String[] selectionArgs, String sortOrder);
uri表示数据content providers的位置路径,也可以直接使用id定位到一条记录上去,projection表示查询指定的列名数组,selection表示查询条件,用"and"分割多个查询条件,当查询条件中存在查询参数"?"时,需要使用selectionArgs添加查询参数,sortOrder用来指定查询顺序
//实现获取数据类型接口
public abstract String getType(Uri uri);
meta数据,获取数据类型
//实现插入数据接口
public abstract Uri insert(Uri uri, ContentValues values);
values需要插入的内容,uri指定content providers
//实现删除数据接口
public abstract int delete(Uri uri, String selection, String[] selectionArgs);

//实现更新数据接口

public abstract int update(Uri uri, ContentValues values, String selection,
            String[] selectionArgs);
3.使用ContentResolver访问content providers
//获取ContentResolver对象
ContentResolver contentResolver = this.getInstrumentation().getContext().getContentResolver();
//插入数据
                ContentValues values = new ContentValues();
                values.put(NotePad.Notes.TITLE, "title1");
                values.put(NotePad.Notes.NOTE, "NOTENOTE1");
                contentResolver.insert(NotePad.Notes.CONTENT_URI, values);
//删除数据
                ContentResolver contentResolver = this.getInstrumentation().getContext().getContentResolver();
                //指定id删除
                 contentResolver.delete(ContentUris.withAppendedId(NotePad.Notes.CONTENT_URI,
                 2), null, null);
                 //使用where条件删除
                 contentResolver.delete(NotePad.Notes.CONTENT_URI,
                 NotePad.Notes.TITLE+"=/"title1/"", null);
                 //使用where条件参数删除
                contentResolver.delete(NotePad.Notes.CONTENT_URI, NotePad.Notes.TITLE + "=?", new String[] { "title2" });
//修改数据
                ContentResolver contentResolver = this.getInstrumentation().getContext().getContentResolver();
                ContentValues values = new ContentValues();
                values.put(NotePad.Notes.TITLE, "title1");
                values.put(NotePad.Notes.NOTE, "NOTENOTE2");

                contentResolver.update(NotePad.Notes.CONTENT_URI, values, NotePad.Notes.TITLE + "=?", new String[] { "title1" });

//查询数据
                ContentResolver contentResolver = this.getInstrumentation().getContext().getContentResolver();
                String columns[] = new String[] { NotePad.Notes._ID, NotePad.Notes.TITLE, NotePad.Notes.NOTE, NotePad.Notes.CREATEDDATE, NotePad.Notes.MODIFIEDDATE };
                Cursor cur = contentResolver.query( NotePad.Notes.CONTENT_URI, columns, NotePad.Notes.TITLE + "=?",  new String[] { "title1" }, NotePad.Notes._ID);
                if (cur.moveToFirst()) {
                        String id = null;
                        String title = null;
                        String note = null;
                        do {
                                id = cur.getString(cur.getColumnIndex(NotePad.Notes._ID));
                                title = cur.getString(cur.getColumnIndex(NotePad.Notes.TITLE));
                                note = cur.getString(cur.getColumnIndex(NotePad.Notes.NOTE));
                                System.out.println("Record:"+id+" "+title+" "+note+" ");
                        } while (cur.moveToNext());
                }

转载地址:http://bfhvi.baihongyu.com/

你可能感兴趣的文章
【视频教程】Javascript ES6 教程27—ES6 构建一个Promise
查看>>
【5分钟代码练习】01—导航栏鼠标悬停效果的实现
查看>>
127个超级实用的JavaScript 代码片段,你千万要收藏好(中)
查看>>
127个超级实用的JavaScript 代码片段,你千万要收藏好(下)
查看>>
【web素材】03-24款后台管理系统网站模板
查看>>
Flex 布局教程:语法篇
查看>>
年薪50万+的90后程序员都经历了什么?
查看>>
2019年哪些外快收入可达到2万以上?
查看>>
【JavaScript 教程】标准库—Date 对象
查看>>
前阿里手淘前端负责人@winter:前端人如何保持竞争力?
查看>>
【JavaScript 教程】面向对象编程——实例对象与 new 命令
查看>>
我在网易做了6年前端,想给求职者4条建议
查看>>
SQL1015N The database is in an inconsistent state. SQLSTATE=55025
查看>>
RQP-DEF-0177
查看>>
MySQL字段类型的选择与MySQL的查询效率
查看>>
Java的Properties配置文件用法【续】
查看>>
JAVA操作properties文件的代码实例
查看>>
IPS开发手记【一】
查看>>
Java通用字符处理类
查看>>
文件上传时生成“日期+随机数”式文件名前缀的Java代码
查看>>