Android ContentProvider
来源:互联网 发布:sqlserver 视图 编辑:程序博客网 时间:2024/05/22 12:20
ContentProvider是不同应用程序间数据交换的标准API;
ContentProvider使用表来组织数据
一旦某个应用程序通过ContentProvider暴露了自己的数据操作接口,那么不管该应用程序是否启动,,其他应用程序都可以通过该接口来操作应用程序内部的数据(插查修删)
操作的大部分数据是来自数据库有时候也使用文件xml和网络
应用程序A可以通过ContentProvider向系统提供访问接口。并提供标识:android:authorities=xxx
其他应用程序可以通过ContentResolver获得系统的访问接口。根据xxx找到A的API。
两边都实现了插入,查询,修改,删除的操作。
实现ContentProvider的步骤:
1. 开发一个ContentProvider子类并实现“插查修删”接口
2. 在AndroidManifest.xml中配置ContentProvider
ContentResolver 使用
1. 获得系统的ContentResolver。contentResolver = getContentResolver();
2. 调用ContentResoler的“插查修删”方法
3. 方法参数如
public final Cursor query (Uri uri, String[] projection,String selection,String[] selectionArgs,String sortOrder)
Uri就是Provider的标识,用来区分不同的ContentProvider。
第二个参数projection 代表要返回的内容,实际就是列的名字。
第三个参数selection 设置条件,当于SQL语句中的where后面的。null表示不进行筛选。
第四个参数selectionArgs,配合第三个参数使用,如果第三个参数中有?,则在selectionArgs会替换掉?,可为null
第五个参数sortOrder,按照什么进行排序,相当于SQL语句中的Order by后面的如“DSEC”
代码:
package com.contentproviderdemo;import android.content.ContentProvider;import android.content.ContentValues;import android.database.Cursor;import android.net.Uri;import android.util.Log;public class MyContentProvider extends ContentProvider {private String TAG = "MyContentProvider";@Overridepublic int delete(Uri uri, String selection, String[] selectionArgs) {// TODO Auto-generated method stubLog.v(TAG, "=== delete ===");return 0;}@Overridepublic String getType(Uri uri) {// TODO Auto-generated method stubreturn null;}@Overridepublic Uri insert(Uri uri, ContentValues values) {// TODO Auto-generated method stubLog.v(TAG, "=== insert ===");return null;}@Overridepublic boolean onCreate() {// TODO Auto-generated method stubLog.v(TAG, "=== onCreate ===");return false;}@Overridepublic Cursor query(Uri uri, String[] projection, String selection,String[] selectionArgs, String sortOrder) {// TODO Auto-generated method stubLog.v(TAG, "=== query ===");return null;}@Overridepublic int update(Uri uri, ContentValues values, String selection,String[] selectionArgs) {// TODO Auto-generated method stubLog.v(TAG, "=== update ===");return 0;}}
配置ContentProvider
<provider android:name="com.contentproviderdemo.MyContentProvider" android:authorities="com.contentproviderdemo.mycontentprovider" android:exported="true" > </provider>
ContentResolver的使用
package com.contentresolverdemo;import android.net.Uri;import android.os.Bundle;import android.app.Activity;import android.content.ContentResolver;import android.content.ContentValues;import android.database.Cursor;import android.view.Menu;import android.view.View;import android.widget.Toast;public class MainActivity extends Activity {ContentResolver contentResolver;Uri uri = Uri.parse("content://com.contentproviderdemo.mycontentprovider");@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);// 获得系统的ContentResolver服务contentResolver = getContentResolver();View.OnClickListener listener = new View.OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubswitch (v.getId()) {case R.id.button1:// 插入ContentValues values = new ContentValues();values.put("name", "fkjava");Uri newUri = contentResolver.insert(uri, values);Toast.makeText(MainActivity.this,"远程的ContentProvider新插入记录的Uri: " + newUri,Toast.LENGTH_SHORT).show();break;case R.id.button2:// 查询Cursor cursor = contentResolver.query(uri, null,"quary_where", null, null);Toast.makeText(MainActivity.this,"远程的ContentProvider返回的Cursor: " + cursor,Toast.LENGTH_SHORT).show();break;case R.id.button3:// 修改ContentValues values2 = new ContentValues();values2.put("name", "fkJava");int count = contentResolver.update(uri, values2,"update_where", null);Toast.makeText(MainActivity.this,"远程的ContentProvider update()的返回值: " + count,Toast.LENGTH_SHORT).show();break;case R.id.button4:// 删除int count1 = contentResolver.delete(uri, "delete_where",null);Toast.makeText(MainActivity.this,"远程的ContentProvider 删除的记录数为: " + count1,Toast.LENGTH_SHORT).show();break;default:break;}}};findViewById(R.id.button1).setOnClickListener(listener);findViewById(R.id.button2).setOnClickListener(listener);findViewById(R.id.button3).setOnClickListener(listener);findViewById(R.id.button4).setOnClickListener(listener);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}
参考:
http://blog.csdn.net/wssiqi/article/details/8132603
=====================================================
- android contentprovider
- android contentprovider
- Android ContentProvider
- android ContentProvider
- Android ContentProvider
- android ContentProvider
- android ContentProvider
- Android ContentProvider
- Android ContentProvider
- android ContentProvider
- Android ContentProvider
- android contentprovider
- android contentProvider
- Android ContentProvider
- Android ContentProvider
- Android ContentProvider
- Android ContentProvider
- android contentprovider
- 从autohotkey到Python
- 手把手教你用sencha touch 开发手机应用界面切换
- 栈操作表达式的解析和运算
- cocos2d-x3.0RC2 TableViewDemo
- SaltStack 简介、安装、简单配置
- Android ContentProvider
- 《Head First 设计模式》状态模式
- 问题
- 面试题五:求子数组的最大和
- 踏上IT行业噶第一步
- 6410平台500W摄像头调试过程 && 拍照偏绿和图片保存等BUG
- 国务院总理李克强4月16日主持召开国务院常务会议,分析研究一季度经济形势,部署落实2014年深化经济体制改革重点任务,确定金融服务“三农”发展的措施,决定延续并完善支持和促进创业就业的税收政策。
- 小强的HTML5移动开发之路(49)——HTML5开发神器HBuilder
- Canvas.rotate与clipRect的应用