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

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










  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值