一.ContentProvider的概念
ContentProvider:为存储和获取数据提供统一的接口。可以在不同的应用程序之间共享数据。Android已经为常见的一些数据提供了默认的ContentProvider1、ContentProvider使用表的形式来组织数据
无论数据的来源是什么,ContentProvider都会认为是一种表,然后把数据组织成表格
2、ContentProvider提供的方法
query:查询
insert:插入
update:更新
delete:删除
getType:得到数据类型
onCreate:创建数据时调用的回调函数
二.ContentResolver的概念
ContentResolver则负责获取ContentProvider提供的数据;修改/添加/删除更新数据等;
三.ContentProvider的简单应用
public class MyContentProvinder extends ContentProvider{
private SQLiteDatabase db;
private UriMatcher uriMatcher;
@Override
public boolean onCreate() {
//获得数据库操作对象
DbUtil dbUtil = new DbUtil(getContext(), "G150820.db", null, 2);
db = dbUtil.getReadableDatabase();
//实例化Uri匹配器
uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
//添加规则
//查询所有
uriMatcher.addURI("com.example.myapplication.android24_provinder.student","hehe",0);
//查询单个
uriMatcher.addURI("com.example.myapplication.android24_provinder.student","hehe/#",1);
return false;
}
@Nullable
@Override
public Cursor query(Uri uri, String[] strings, String s, String[] strings1, String s1) {
//识别匹配器 识别的Uri
int code=uriMatcher.match(uri);
switch (code){
case 0:
return db.query("student",strings,s,strings1,null,null,s1,null);
case 1:
//查询单个
//获取# 的值
long id= ContentUris.parseId(uri);
return db.rawQuery("select * from student where _id=?",new String[]{""+id});
}
return null;
}
@Nullable
@Override
public String getType(Uri uri) {
return null;
}
@Nullable
@Override
public Uri insert(Uri uri, ContentValues contentValues) {
return null;
}
@Override
public int delete(Uri uri, String s, String[] strings) {
return db.delete("student",s,strings);
}
@Override
public int update(Uri uri, ContentValues contentValues, String s, String[] strings) {
return 0;
}
}
首先创建一个类继承ContentProvider,重写其基本的方法。我在这里使用了query方法,delete方法.
然后是xml文件的配置.
<provider android:authorities="com.example.myapplication.android24_provinder.student" android:name="com.provinder.MyContentProvinder" android:exported="true" ></provider>
在<Application></Application>中间加入,provinder的配置,
android:authorities:唯一的标识符作用;android:name:继承了ContentProvider的类名;
android:exported:开启关闭状态;
四.ContentResolver的使用
public class MainActivity extends AppCompatActivity { private EditText query_id_et; private Button query_bt; private ListView show_list; private ContentResolver contentResolver; private SimpleCursorAdapter simpleCursorAdapter; private Cursor cursor; private Uri uri; private long ll; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化控件 initview(); } //初始化控件 private void initview(){ //获取内容访问者 contentResolver = getContentResolver(); query_id_et = (EditText) findViewById(R.id.query_id_et); query_bt = (Button) findViewById(R.id.query_bt); show_list = (ListView) findViewById(R.id.show_list); simpleCursorAdapter = new SimpleCursorAdapter(this,R.layout.item_list,cursor,new String[]{"_id","name","age"},new int[]{R.id.id_item,R.id.name_item,R.id.age_item}); show_list.setAdapter(simpleCursorAdapter); //listview 长按删除 show_list.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) { //删除的id ll=l; final AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this); final AlertDialog alertdialog=builder.create(); //点击空白处 不取消对话框 alertdialog.setCancelable(false); //删除弹窗 View v=LayoutInflater.from(MainActivity.this).inflate(R.layout.dialog_delete,null); //删除 v.findViewById(R.id.dialog_delete_btn).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { uri = Uri.parse("content://com.example.myapplication.android24_provinder.student/hehe"); //删除数据 int deleteType=contentResolver.delete(uri,"_id=?",new String[]{""+ll}); if(deleteType==1){ Toast.makeText(MainActivity.this, "删除成功", Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(MainActivity.this, "删除失败", Toast.LENGTH_SHORT).show(); } alertdialog.dismiss(); } }); //返回 v.findViewById(R.id.dialog_back_btn).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { alertdialog.dismiss(); } }); alertdialog.setView(v); alertdialog.show(); return false; } }); //搜索 query_bt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //判断有无搜索条件 if(TextUtils.isEmpty(query_id_et.getText())){ //无条件 uri = Uri.parse("content://com.example.myapplication.android24_provinder.student/hehe"); }else{ //有条件 uri = Uri.parse("content://com.example.myapplication.android24_provinder.student/hehe/"+query_id_et.getText().toString().trim()); } //访问者 返回数据 cursor = contentResolver.query(uri,null,null,null,null); //通知适配器改变 simpleCursorAdapter.changeCursor(cursor); } }); } }