//先创建: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