本文共 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/