ContentProvider(ContentResolver)的增查删改、Uri的两种解析方法

//先创建:new-other-contentprovider类 :MyContentProvider
//再去操作contentresolver包,主活动调用  ContentResolver  类定义对象全局使用,实例化并get***获取ContentResolver对象
//在创建时 MyContentProvider 调用onCreate(),创建数据库 :方法  SQLiteOpenHelper、SQLiteDatabase
//在contentresolver中做点击事件方法 operate(),有四种操作,方法中 resolver.方法名调用,注意参数类型。
//
// #insert()#方法,可能会用到 ContentValues 实例化 values,在这里输入值会通过传给 values 进而放到MyContentProvider的insert方法的values。
//!再次提醒  处理机制:在Resolver调用方法影响到MyContentProvider的同名方法*******
//!在cR对控件进行初始化,时机不固定。选择点击事件写在主方法,Edit文本事件写在operate里面,注意他们的取值方法和数据类型的转换为需要的类型。
//ContentUris类用于获取Uri路径后面的ID部分,id是指数据库中每条记录的唯一标识,即id号
//
// #query()#方法,用Cursor类进行ProV的数据库取值存值及返回到cR,注意cR的query方法设定的对应参数来取出想要的数据。
//因为布局里用的ListView,所以用到游标适配器SimpleCursorAdapter(参数设置来规定怎么填数据怎么显示),之后应用适配器到ListView。
//!通过Uri解析名字找目标,执行目标对应的各种方法,可以通过声明放到外面给所有方法共用:
//         Uri uri=Uri.parse("content://com.jinanchang.myprovider");
//
// #delete()#方法,返回值是int类型,先在Pro里做好方法重写,在cR根据int类型的返回值判断删除是否成功,result>0为成功。
//
// #update()#方法,修改指定id的数据信息,用到ContentValues做新数据添加,
//               返回值是int类型,先在Pro里做好方法重写,在cR根据int类型的返回值判断删除是否成功,up>0为成功。
//
//Uri的解析:
//1.UriMatcher:利用UriMatcher去解析Uri,1.在contentProvider创建时,制定好匹配规则,当调用了ContentProvider中的操作方法时
//             2.利用匹配类去匹配传的uri,根据不同的uri给出不同的处理。
//  先在oncreate()的后面return前创建,先添加参数。之后调用的是Pro的delete方法:根据匹配码来判断,不匹配就删除本条信息。
//  UriMatcher还可以通过匹配通配符来匹配任意不确定的值。数字#,字符*
//
//2.Uri自带解析方法:把uri拆开取出来。cR:调用insert()方法,再装到Pro的数据库再返回uri解析出来id判断是否成功;
//  pro:从uri提取出来,解析出来数据,赋值给values,将values传参进去进行数据库添加操作

一、

ContentProvider-MainActivity
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

二、

MyContentProvider         extends ContentProvider


//创建一个ContentProvider类,即自定义  康腾特普绕外得儿
public class MyContentProvider extends ContentProvider {

    private UriMatcher matcher;//设为全局变量给delete()用

    public MyContentProvider() {
    }

    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        //根据传的值来操作是否删除
        int result = 0;//用于返回的结果判断int类值
        int code = matcher.match(uri);//取出匹配码  并在下面判断
        switch (code) {
            case 1000:
                Log.e("TAG", "匹配正确1000");
                break;
            case 1001:
                Log.e("TAG", "匹配正确1001");
                break;
            case 1002:
                Log.e("TAG", "匹配正确1002任意数字内容");
                break;
            case 1003:
                Log.e("TAG", "匹配正确1003任意字符内容");
                break;
            default:
                Log.e("TAG", "匹配不正确,执行删除数据库内容");
                result = db.delete("info_tb", selection, selectionArgs);
                break;
        }

        //输入学号删除对应信息
        //delete是int类型,根据int类型的返回值判断删除是否成功影响了多少行
//        int result=db.delete("info_tb",selection,selectionArgs);

        //最后返回result值,result是行数,被删除的行数。
        return result;
    }

    @Override
    public String getType(Uri uri) {
        // TODO: Implement this to handle requests for the MIME type of the data
        // at the given URI.
        throw new UnsupportedOperationException("Not yet implemented");
    }

    @Override
    //从contentresolver传过来的values,伴随着修改信息值。
    public Uri insert(Uri uri, ContentValues values) {
        Log.e("TAG", "调用了contentproviderapplication的insert方法");
        //用oncreate中的数据库对象db来操作insert插入事件
        //String table:字元串表; 字符串表; 编译表; 串表; 字串表;
        //uri自带解析,对values判空操作来确定赋不赋值
        long id = 0;
        if (v
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值