网站制作上网,企业网站页面,学校网站建设情况介绍,百度怎么自己做网站吗例如以下内容为从网络转载#xff1a;使用ContentProvider共享数据#xff1a;当应用继承ContentProvider类#xff0c;并重写该类用于提供数据和存储数据的方法#xff0c;就能够向其它应用共享其数据。虽然使用其它方法也能够对外共享数据#xff0c;但数据訪问方式会因… 例如以下内容为从网络转载 使用ContentProvider共享数据 当应用继承ContentProvider类并重写该类用于提供数据和存储数据的方法就能够向其它应用共享其数据。虽然使用其它方法也能够对外共享数据但数据訪问方式会因数据存储的方式而不同如採用文件方式对外共享数据须要进行文件操作读写数据採用sharedpreferences共享数据须要使用sharedpreferences API读写数据。而使用ContentProvider共享数据的优点是统一了数据訪问方式。 当应用须要通过ContentProvider对外共享数据时第一步须要继承ContentProvider并重写以下方法 public class PersonContentProvider extends ContentProvider{ public boolean onCreate() public Uri insert(Uri uri, ContentValues values) public int delete(Uri uri, String selection, String[] selectionArgs) public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) public String getType(Uri uri)} 第二步须要在AndroidManifest.xml使用provider对该ContentProvider进行配置为了能让其它应用找到该ContentProvider ContentProvider 採用了authorities主机名/域名对它进行唯一标识你能够把 ContentProvider看作是一个站点想想站点也是提供数据者authorities 就是他的域名 manifest .... application android:icondrawable/icon android:labelstring/app_name provider android:name.PersonContentProvider android:authoritiescn.itcast.provider.personprovider/ /application /manifest 注意一旦应用继承了ContentProvider类后面我们就会把这个应用称为ContentProvider内容提供者。 l Uri介绍 Uri代表了要操作的数据Uri主要包括了两部分信息1》须要操作的ContentProvider 2》对ContentProvider中的什么数据进行操作一个Uri由下面几部分组成 l ContentProvider内容提供者的scheme已经由Android所规定 scheme为content:// 主机名或叫Authority用于唯一标识这个ContentProvider外部调用者能够依据这个标识来找到它。 路径path能够用来表示我们要操作的数据路径的构建应依据业务而定例如以下: 要操作person表中id为10的记录能够构建这种路径:/person/10 要操作person表中id为10的记录的name字段person/10/name 要操作person表中的全部记录能够构建这种路径:/person 要操作xxx表中的记录能够构建这种路径:/xxx 当然要操作的数据不一定来自数据库也能够是文件等他存储方式例如以下: 要操作xml文件里person节点下的name节点能够构建这种路径/person/name 假设要把一个字符串转换成Uri能够使用Uri类中的parse()方法例如以下 Uri uri Uri.parse(content://cn.itcast.provider.personprovider/person) lUriMatcher类使用介绍 由于Uri代表了要操作的数据所以我们非常常常须要解析Uri并从Uri中获取数据。Android系统提供了两个用于操作Uri的工具类分别为UriMatcher 和ContentUris 。掌握它们的使用会便于我们的开发工作。 UriMatcher类用于匹配Uri它的使用方法例如以下 首先第一步把你须要匹配Uri路径所有给注冊上例如以下 //常量UriMatcher.NO_MATCH表示不匹配不论什么路径的返回码 UriMatcher sMatcher new UriMatcher(UriMatcher.NO_MATCH); //假设match()方法匹配content://cn.itcast.provider.personprovider/person路径返回匹配码为1 sMatcher.addURI(“cn.itcast.provider.personprovider”, “person”, 1);//加入须要匹配uri假设匹配就会返回匹配码 //假设match()方法匹配content://cn.itcast.provider.personprovider/person/230路径返回匹配码为2 sMatcher.addURI(“cn.itcast.provider.personprovider”, “person/#”, 2);//#号为通配符 switch (sMatcher.match(Uri.parse(content://cn.itcast.provider.personprovider/person/10))) { case 1 break; case 2 break; default://不匹配 break; } 注冊完须要匹配的Uri后就能够使用sMatcher.match(uri)方法对输入的Uri进行匹配如果匹配就返回匹配码匹配码是调用addURI()方法传入的第三个參数如果匹配content://cn.itcast.provider.personprovider/person路径返回的匹配码为1 lContentUris类使用介绍 ContentUris类用于获取Uri路径后面的ID部分它有两个比較有用的方法 withAppendedId(uri, id)用于为路径加上ID部分 Uri uri Uri.parse(content://cn.itcast.provider.personprovider/person) Uri resultUri ContentUris.withAppendedId(uri, 10); //生成后的Uri为content://cn.itcast.provider.personprovider/person/10 parseId(uri)方法用于从路径中获取ID部分 Uri uri Uri.parse(content://cn.itcast.provider.personprovider/person/10) long personid ContentUris.parseId(uri);//获取的结果为:10 l使用ContentProvider共享数据 ContentProvider类主要方法的作用 public boolean onCreate() 该方法在ContentProvider创建后就会被调用 Android在系统启动时就会创建ContentProvider 。 public Uri insert(Uri uri, ContentValues values) 该方法用于供外部应用往ContentProvider加入数据。 public int delete(Uri uri, String selection, String[] selectionArgs) 该方法用于供外部应用从ContentProvider删除数据。 public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) 该方法用于供外部应用更新ContentProvider中的数据。 public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) 该方法用于供外部应用从ContentProvider中获取数据。 public String getType(Uri uri) 该方法用于返回当前Url所代表数据的MIME类型。假设操作的数据属于集合类型那么MIME类型字符串应该以vnd.android.cursor.dir/开头比如要得到全部person记录的Uri为content://cn.itcast.provider.personprovider/person那么返回的MIME类型字符串应该为“vnd.android.cursor.dir/person”。假设要操作的数据属于单一数据那么MIME类型字符串应该以vnd.android.cursor.item/开头比如得到id为10的person记录Uri为content://cn.itcast.provider.personprovider/person/10那么返回的MIME类型字符串应该为“vnd.android.cursor.item/person”。 l使用ContentResolver操作ContentProvider中的数据 当外部应用须要对ContentProvider中的数据进行加入、删除、改动和查询操作时能够使用ContentResolver 类来完毕要获取ContentResolver 对象能够使用Activity提供的getContentResolver()方法。 ContentResolver 类提供了与ContentProvider类同样签名的四个方法 public Uri insert(Uri uri, ContentValues values) 该方法用于往ContentProvider加入数据。 public int delete(Uri uri, String selection, String[] selectionArgs) 该方法用于从ContentProvider删除数据。 public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) 该方法用于更新ContentProvider中的数据。 public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) 该方法用于从ContentProvider中获取数据。 这些方法的第一个參数为Uri代表要操作的是哪个ContentProvider和对当中的什么数据进行操作如果给定的是 Uri.parse(“content://cn.itcast.provider.personprovider/person/10”)那么将会对主机名为cn.itcast.provider.personprovider的ContentProvider进行操作操作的数据为person表中id为10的记录 l使用ContentResolver操作ContentProvider中的数据 使用ContentResolver对ContentProvider中的数据进行加入、删除、改动和查询操作 ContentResolver resolver getContentResolver(); Uri uri Uri.parse(content://cn.itcast.provider.personprovider/person); //加入一条记录 ContentValues values new ContentValues(); values.put(name, itcast); values.put(age, 25); resolver.insert(uri, values); //获取person表中全部记录 Cursor cursor resolver.query(uri, null, null, null, personid desc); while(cursor.moveToNext()){ Log.i(ContentTest, personid cursor.getInt(0) ,name cursor.getString(1)); } //把id为1的记录的name字段值更改新为liming ContentValues updateValues new ContentValues(); updateValues.put(name, liming); Uri updateIdUri ContentUris.withAppendedId(uri, 2); resolver.update(updateIdUri, updateValues, null, null); //删除id为2的记录 Uri deleteIdUri ContentUris.withAppendedId(uri, 2); resolver.delete(deleteIdUri, null, null); public class PersonContentProvider extends ContentProvider{ private DataBaseOpenHelper dataBaseOpenHelper; private static final int ALLPERSON1; private static final int PERSON2; private static final UriMatcher uriMatchernew UriMatcher(UriMatcher.NO_MATCH); static{ uriMatcher.addURI(com.gao.provider.personprovider, person, ALLPERSON); uriMatcher.addURI(com.gao.provider.personprovider, person/#, PERSON); } Override public int delete(Uri uri, String selection, String[] selectionArgs) { SQLiteDatabase databasedataBaseOpenHelper.getWritableDatabase(); int count0; switch (uriMatcher.match(uri)) { case ALLPERSON://content://com.gao.provider.personprovider/person countdatabase.delete(person, selection, selectionArgs); break; case PERSON://content://com.gao.provider.personprovider/person/100 long idContentUris.parseId(uri); String whereTextUtils.isEmpty(selection)?personid?:selectionand personid?; String[] paramsnew String[]{String.valueOf(id)}; if (!TextUtils.isEmpty(selection)selectionArgs!null) { paramsnew String[selectionArgs.length1]; for (int i 0; i selectionArgs.length; i) { params[i]selectionArgs[i]; } params[selectionArgs.length1]String.valueOf(id); } countdatabase.delete(person, where, selectionArgs); break; default: throw new IllegalArgumentException(Unkonw uri:uri); } return count; } Override public String getType(Uri uri) { switch (uriMatcher.match(uri)) { case ALLPERSON: return vnd.android.cursor.dir/personprovider.person; case PERSON: return vnd.android.cursor.item/personprovider.person; default: break; } return null; } Override public Uri insert(Uri uri, ContentValues values) { SQLiteDatabase databasedataBaseOpenHelper.getWritableDatabase(); long id0; switch (uriMatcher.match(uri)) { case ALLPERSON://content://com.gao.provider.personprovider/person iddatabase.insert(person, name, values);//返回记录的行号主键是int实际上就是主键值 return ContentUris.withAppendedId(uri, id); case PERSON://content://com.gao.provider.personprovider/person/100 iddatabase.insert(person, name, values); String pathuri.toString(); return Uri.parse(path.substring(0, path.lastIndexOf(/))id); default: throw new IllegalArgumentException(Unkonw uri:uri); } } Override public boolean onCreate() { dataBaseOpenHelpernew DataBaseOpenHelper(this.getContext()); return false; } Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { SQLiteDatabase databasedataBaseOpenHelper.getReadableDatabase(); switch (uriMatcher.match(uri)) { case ALLPERSON: database.query(person, projection, selection, selectionArgs, null, null, sortOrder); break; case PERSON: long idContentUris.parseId(uri); String whereTextUtils.isEmpty(selection)?personid?:selectionand personid?; String[] paramsnew String[]{String.valueOf(id)}; if (!TextUtils.isEmpty(selection)selectionArgs!null) { paramsnew String[selectionArgs.length1]; for (int i 0; i selectionArgs.length; i) { params[i]selectionArgs[i]; } params[selectionArgs.length1]String.valueOf(id); } database.query(person, projection, where, params, null, null, sortOrder); break; default: break; } return null; } //update(content://com.gao.provider.personprovider/person/100,values,name like ? and ...,new String[]{%gao%}); Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { SQLiteDatabase databasedataBaseOpenHelper.getWritableDatabase(); int count0; switch (uriMatcher.match(uri)) { case ALLPERSON://content://com.gao.provider.personprovider/person countdatabase.update(person, values, selection,selectionArgs); break; case PERSON://content://com.gao.provider.personprovider/person/100 long idContentUris.parseId(uri); String whereTextUtils.isEmpty(selection)?personid?:selectionand personid?; String[] paramsnew String[]{String.valueOf(id)}; if (!TextUtils.isEmpty(selection)selectionArgs!null) { paramsnew String[selectionArgs.length1]; for (int i 0; i selectionArgs.length; i) { params[i]selectionArgs[i]; } params[selectionArgs.length1]String.valueOf(id); } countdatabase.update(person, values, where,params); break; default: throw new IllegalArgumentException(Unkonw uri:uri); } return count; } } AndroidManifest.xml provider android:namePersonContentProvider android:authoritiescom.gao.provider.personprovider / 在还有一个程序ContentProviderUser中使用上面的内容提供者 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ContentResolver contentResolverthis.getContentResolver(); Uri allUriUri.parse(content://com.gao.provider.personprovider/person); ContentValues valuesnew ContentValues(); values.put(name, GGGGG); values.put(age, 19); contentResolver.insert(uri, values); values.put(name, CCCCCC); values.put(age, 100); Uri uriUri.parse(content://com.gao.provider.personprovider/person/9); // contentResolver.update(uri, values, null, null); //contentResolver.delete(uri, null, null); Cursor cursorcontentResolver.query(uri, new String[]{personid,name,age}, null, null, personid desc); while (cursor.moveToNext()) { Log.i(TAG, psrsonid:cursor.getInt(0),name:cursor.getString(1),agecursor.getInt(2)); } cursor.close(); } 转载于:https://www.cnblogs.com/blfshiye/p/4076025.html