首页 > 系统 > Android > 正文

Android ContentProvinder(内容提供者) ContentResolver(内容访问者)的简单应用

2019-11-09 17:14:29
字体:
来源:转载
供稿:网友

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表