Android ContentProvinder(内容提供者) ContentResolver(内容访问者)的简单应用
2017-02-08 11:46
447 查看
一.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;@Overridepublic 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@Overridepublic Cursor query(Uri uri, String[] strings, String s, String[] strings1, String s1) {//识别匹配器 识别的Uriint 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@Overridepublic String getType(Uri uri) {return null;}@Nullable@Overridepublic Uri insert(Uri uri, ContentValues contentValues) {return null;}@Overridepublic int delete(Uri uri, String s, String[] strings) {return db.delete("student",s,strings);}@Overridepublic int update(Uri uri, ContentValues contentValues, String s, String[] strings) {return 0;}}
首先创建一个类继承ContentProvider,重写其基本的方法。我在这里使用了query方法,delete方法.
然后是xml文件的配置.
<providerandroid: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;@Overrideprotected 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() {@Overridepublic boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {//删除的idll=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() {@Overridepublic 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() {@Overridepublic void onClick(View view) {alertdialog.dismiss();}});alertdialog.setView(v);alertdialog.show();return false;}});//搜索query_bt.setOnClickListener(new View.OnClickListener() {@Overridepublic 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);}});}}
相关文章推荐
- android的与ContentResolver(内容访问者)对ContentProvider(内容提供者)的增删查改
- Android 中ContentProvider内容提供者和ContentResolver内容访问者
- Android ContentProvider(内容提供者 )+ContentResolver(内容访问者)
- Android----ContentProvider(内容提供者) ContentResolver(内容访问者)
- Android:内容提供者(ContentProvider)和内容访问者(ContentResolver)
- android_内容提供者和内容解析者_简单入门
- android Content Providers 内容提供者
- Android Content Provider Tutorial--安卓内容提供者系列3--操作安卓联系人
- Android-应用开发-内容提供者(十)
- ContentProvider内容提供者与ContentResolver内容访问者
- Google Android开发者文档系列-创建有内容分享特性的应用之接收其它应用程序发送的简单数据
- Android Content Provider Tutorial--安卓内容提供者系列2--内容提供者用法
- Android学习---通过内容提供者(ContentProvider)操作另外一个应用私有数据库的内容
- android contentprovider内容提供者
- Android Content Provider Tutorial--安卓内容提供者系列5--Loader用法
- Android Content Provider Tutorial--安卓内容提供者系列1--内容提供者介绍
- 无废话Android之listview入门,自定义的数据适配器、采用layoutInflater打气筒创建一个view对象、常用数据适配器ArrayAdapter、SimpleAdapter、使用ContentProvider(内容提供者)共享数据、短信的备份、插入一条记录到系统短信应用(3)
- Android中内容提供者解析----增删查改其他应用的数据库
- Android入门——内容提供者Content Provider详解与应用
- Android知识点——内容提供者和内容观察者ContentProvider ContentResolver