一.ContentPRovider的概念
ContentProvider:为存储和获取数据提供统一的接口。可以在不同的应用程序之间共享数据。Android已经为常见的一些数据提供了默认的ContentProvider 1、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); } }); }}
新闻热点
疑难解答