ContentProvider内容提供者 存在:数据库
ContentResolver内容访问者
ContentProvider是安卓的四大组件之一,用来共享应用程序内的数据,当你需要把你的数据分享给其他应用的时候才需要组件对外提供其他应用,如果通过内容提供者而让数据暴露。不管程序是否启动,都是可以访问到的。
这是在学习的时候写的一个小demo, ContentProvider首先在内容提供者的程序中要写一个帮助类,创建所需要的表,字段,
public class DbHelper extends SQLiteOpenHelper {
/**
*
* @param context 上下文
* @param name 数据库名字(数据库文件名)
* @param factory 数据库工厂 (null)
* @param version 数据库版本(1.0 一个表) 2.0(两个表)
*/
public DbHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
Log.i("test","DbHelper构造");
}
/**
* 创建表的操作
* @param sqLiteDatabase
*/
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
Log.i("test","创建表");
sqLiteDatabase.execSQL("create table person(_id integer primary key autoincrement,pname,page)");
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
Log.i("test","onUpgrade");
}
}
在provider中继承ContentProvider, //实例化URI匹配器
uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
给匹配器中添加匹配规则,在方法中实现匹配
public Cursor query(Uri uri, String[] strings, String s, String[] strings1, String s1) {
Log.i("test","query");
//开始匹配
int code=uriMatcher.match(uri);
switch (code) {
case 0:
//查询所有
c = db.query(false,"person",strings,s,strings1,null,null,s1,null);
return c;
case 1:
//得到#的值
long id=ContentUris.parseId(uri);
//查询单个:
c= db.query(false,"person",strings,"_id=?",new String[]{id+""},null,null,s1,null);
return c;
}
return null;
}
在清单文件中配置
<provider
android:authorities="com.zking.android_sqlite.MY"
android:name=".provider.MyProvider"
android:exported="true"
></provider>
在ContentResolver 方法中获取另外一个类中的方法
//得到内容访问者
contentResolver = getContentResolver();
lv_main_list = (ListView) findViewById(R.id.lv_main_list);
et_main_id = (EditText) findViewById(R.id.et_main_id);
//适配器
adapter = new SimpleCursorAdapter(this, R.layout.item_listview,cursor,new String[]{"_id","pname","page"},new int[]{R.id.iv_item_listview_id,R.id.iv_item_listview_name,R.id.iv_item_listview_age});
lv_main_list.setAdapter(adapter);
}
public void query(View view) {
if (TextUtils.isEmpty(et_main_id.getText())) {
//查询所有
// et_main_id.setError("不能为空");
uri = Uri.parse("content://com.zking.android_sqlite.MY/persons");
} else {
String id = et_main_id.getText().toString();
//查询单个
uri = Uri.parse("content://com.zking.android_sqlite.MY/persons/" + id);
}
//查询
cursor = contentResolver.query(uri, null, null, null, null);
//通知适配器发生改变
adapter.changeCursor(cursor);
//adapter.notifyDataSetChanged();
}
网上还有很多这样的案列这里就不多说了。