您的位置:首页 > 移动开发 > Android开发

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);}});}}

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