刚好接触到ContentProvider内容提供者与ContentResolver内容访问者,对它进行了一个初步的了解,它主要用于不同的应用程序之间实现数据的共享,允许一个程序访问另一个程序,还可以保证数据的安全。
以下是我写的一个简单的ContentProvider与ContentResolver的一个列子:
首先创建两个dome分别为android1和android2。android1为内容提供者,android2为内容访问者,在android1中创建类ContentProvi继承ContentProvider实现六个方法:
public class ContentProvi extends ContentProvider { private DbHelper dbHelper; private SQLiteDatabase sqLiteDatabase; @Override public boolean onCreate() {
dbHelper = new DbHelper(getContext(),"person.db",null,2); sqLiteDatabase = dbHelper.getReadableDatabase(); return false; } //查询 @Nullable @Override public Cursor query(Uri uri, String[] strings, String s, String[] strings1, String s1){ return sqLiteDatabase.query(false,"person",strings,s,strings1,null,null,s1,null); } @Nullable @Override public String getType(Uri uri) { return null; } //添加 @Nullable @Override public Uri insert(Uri uri, ContentValues contentValues) { sqLiteDatabase.insert("person","name",contentValues); return null; } //删除 @Override public int delete(Uri uri, String s, String[] strings) { sqLiteDatabase.delete("person",s,strings); return 0; } //修改 @Override public int update(Uri uri, ContentValues contentValues, String s, String[] strings) { sqLiteDatabase.update("person",contentValues,s,strings); return 0; }
在android1中的清单文件AndroidManifest.xml需要进行以下配置:
<provider
//可以自己定义
android:authorities="com.example.android_15.1"
//提供者中继承了ContentProvider 的类名路径android:name="com.example.android_15.ee.ContentProvi" android:exported="true" ></provider>
在android2中通过
ContentResolver cr = getContentResolver();
实例化对象ContentResolver通过ContentResolver实现
以下是实现的基础的增删改查
查询:
//uri中的值在需要满足content://协议后面的为你在内容提供者配置文件AndroidManifest.xml中authorities定义的名字
uri = Uri.parse("content://com.example.android_15.1"); Cursor c=cr.query(uri,null,null,null,null); while (c.moveToNext()){ int id=c.getInt(0); String name=c.getString(1); int page=c.getInt(2); Toast.makeText(MainActivity.this,name+ "", Toast.LENGTH_SHORT).show(); }增加:
String name=et_main_name.getText().toString(); int age=Integer.parseInt(et_main_age.getText().toString()); uri = Uri.parse("content://com.example.android_15.1"); //保存到数据库中 ContentValues values=new ContentValues();//Map values.put("name",name); values.put("age",age); values.putNull("_id"); cr.insert(uri,values);删除:
int id=Integer.parseInt(et_main_id.getText().toString()); uri = Uri.parse("content://com.example.android_15.1"); cr.delete(uri,"_id=?",new String[]{id+""});修改:
uri = Uri.parse("content://com.example.android_15.1"); //保存到数据库中 ContentValues values=new ContentValues();//Map values.put("name",name); values.put("age",age); cr.update(uri,values,"_id=?",new String[]{id+""});