您的位置:首页 > 编程语言 > PHP开发

ContentProvider内容提供者与ContentResolver内容访问者

2017-02-06 21:57 495 查看
  刚好接触到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+""});

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐