Android组件之ContentProvider(一)
2016-07-05 11:51
351 查看
ContentProvider是不同应用程序之间进行数据交换的标准·API,两个核心API ContentProvider,
ContentResolver
首先要明确uri的概念
比如:content://com.mrpeng.contentprovider/word
1.content:// 这个部分是android的contentProvider规定的,暴露ContentProvider,访问ContentProvider的协议默认就是content://
2.com.mrpeng.contentprovider:这部分是ContentProvider的authorities,系统由这个部分来找到操作哪个ContentProvider。
3.word:这个是资源部分
还需要配置
ContentResolver
首先要明确uri的概念
比如:content://com.mrpeng.contentprovider/word
1.content:// 这个部分是android的contentProvider规定的,暴露ContentProvider,访问ContentProvider的协议默认就是content://
2.com.mrpeng.contentprovider:这部分是ContentProvider的authorities,系统由这个部分来找到操作哪个ContentProvider。
3.word:这个是资源部分
public class FirstProvider extends ContentProvider { /** * 第一次创建时调用 * @return */ public static final String TAG="FirstProvider"; @Override public boolean onCreate() { Log.e(TAG, "onCreate方法被调用"); return true; } /** * 实现查询方法,该方法应该返回查询得到的Cursor * @param uri * @param projection * @param selection * @param selectionArgs * @param sortOrder * @return */ @Nullable @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { Log.e(TAG,"query方法被调用===uri::"+uri+"selection:::"+selection); return null; } /** * 该方法返回值代表了改ContentProvider所提供的MIME类型 * @param uri * @return */ @Nullable @Override public String getType(Uri uri) { return null; } /** * 实现插入方法,该方法应该返回新插入的记录Uri * @param uri * @param values * @return */ @Nullable @Override public Uri insert(Uri uri, ContentValues values) { Log.e(TAG,"insert方法被调用 参数uri::"+uri+"values参数::"+values); return null; } /** * 实现删除方法,应该返回被删除的记录条数 * @param uri * @param selection * @param selectionArgs * @return */ @Override public int delete(Uri uri, String selection, String[] selectionArgs) { Log.e(TAG,"delete方法被调用 参数uri::"+uri+"参数selection::"+selection); return 0; } /** * 实现更新方法,该方法应该返回被更新的记录条数 * @param uri * @param values * @param selection * @param selectionArgs * @return */ @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { Log.e(TAG,"update方法被调用uri::"+uri+"selection::"+selection+"value::"+values); return 0; }
还需要配置
<provider android:authorities="com.mrpeng.contentproviderdemo.firstProvider" android:name=".FirstProvider" android:exported="true"/>
public class MainActivity extends AppCompatActivity { private ContentResolver mContentResolver; Uri mUri=Uri.parse("content://com.mrpeng.contentproviderdemo.firstProvider/"); public static final String TAG="ContentResolver"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mContentResolver = getContentResolver(); } public void insert(View view){ ContentValues contentValues = new ContentValues(); contentValues.put("name", "mrpeng"); //调用contentresolver的insert()方法,实际返回的是该Uri对应的 //ContentProvider的insert()返回值,其他 delete update query同 Uri newUri = mContentResolver.insert(mUri, contentValues); Log.e(TAG,"远程ContentProvider新插入的uri为"+newUri); } public void delete(View view){ int count = mContentResolver.delete(mUri, "delete_where", null); Log.e(TAG,"远程ContentProvider更新记录数为"+count); } public void update(View view){ ContentValues contentValues = new ContentValues(); contentValues.put("name", "xiaopeng"); int count = mContentResolver.update(mUri, contentValues, "update_where", null); Log.e(TAG,"远程更新的记录数::"+count); } public void query(View view){ Cursor cursor = mContentResolver.query(mUri, null, "query_where", null, null); Log.e(TAG,"远程查询返回的cuseror::"+cursor); } }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories